Chvalov
@Chvalov

Проектирование БД, какой вариант использовать?

Задача:
Есть список ip адресов таблица ipAddress поле ip с которым будем работать
Необходимо проверить пингуется ли данный ip, если нет то в поле dead_ping пишем True
После того как ip проверен меняем значение поля checked на True чтобы больше не проверять

После чего берем ip серверов которые пингуются и ищем домены которые хостятся на серве
Таблица ipToWeb, если по ip мы нашли домены пишем их в поле domain_address, а в поле ip_id пишем id айпишника по которому получили домены

В конечном итоге в таблицу domainInfo мы уже пишем информацию которую получили по домену, ссылаясь на его id в таблице ipToWeb

Как правильно спроектировать БД ?
Сейчас у меня два варианта действий:
Первый:
SC8Mqj4.png

Второй:
A6KDbLA.png

В конечном итоге нужно вывести: ip, domain_address, domain_title, domain_headers

SQL:
DROP DATABASE ip_site_list;
CREATE DATABASE ip_site_list CHARACTER SET utf8 COLLATE utf8_general_ci;
USE ip_site_list;

CREATE TABLE ipAddress (
  id              INT(8)      NOT NULL        PRIMARY KEY       AUTO_INCREMENT,
  ip              VARCHAR(15) NOT NULL        UNIQUE,
  checked         BOOLEAN     DEFAULT FALSE,
  dead_ping       BOOLEAN     DEFAULT FALSE,
  update_up       TIMESTAMP   # По дефоллу NOT NULL и DEFAULT -> NOW()
);

CREATE TABLE ipToWeb (
  id              INT(10)     NOT NULL        PRIMARY KEY       AUTO_INCREMENT,
  ip_id           INT(8)      NOT NULL,
  domain_address  VARCHAR(255),
  update_up       TIMESTAMP, 

  FOREIGN KEY (ip_id) REFERENCES ipAddress (id)
);

CREATE TABLE domainInfo (
  id              INT(10)     NOT NULL        PRIMARY KEY       AUTO_INCREMENT,
  domain_id       INT(10)     NOT NULL,
  domain_title    VARCHAR(255),
  domain_headers  TEXT,
  update_up       TIMESTAMP,

  FOREIGN KEY (domain_id) REFERENCES ipToWeb (id)
);

INSERT INTO ipAddress VALUES (1, '95.183.15.59', TRUE, FALSE, CURRENT_TIMESTAMP());
INSERT INTO ipAddress VALUES (2, '178.248.232.5', TRUE, FALSE, CURRENT_TIMESTAMP());
INSERT INTO ipAddress VALUES (3, '95.183.15.66', TRUE, TRUE, CURRENT_TIMESTAMP());
INSERT INTO ipToWeb VALUES (1, 1, 'zaycev.fm', CURRENT_TIMESTAMP());
INSERT INTO ipToWeb VALUES (2, 2, 'toster.ru', CURRENT_TIMESTAMP());
INSERT INTO ipToWeb VALUES (3, 2, 'autokadabra.ru', CURRENT_TIMESTAMP());
INSERT INTO ipToWeb VALUES (4, 2, 'brainstorage.me', CURRENT_TIMESTAMP());
INSERT INTO ipToWeb VALUES (5, 2, 'tmfeed.ru', CURRENT_TIMESTAMP());
  • Вопрос задан
  • 302 просмотра
Пригласить эксперта
Ответы на вопрос 1
AlexMaxTM
@AlexMaxTM
Второй вариант более правильный. На одном IP может сидеть несколько доменов, в то же время один домен может поменять свой IP со временем. Потому только составной ключ IP-domain может быть уникальным.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы