Структура таблицы для хранения DNS записей.

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Структура таблицы для хранения DNS записей.

Непрочитанное сообщение terminus » 2010-02-11 10:50:39

Появилась жизненная необходимость написать "админку" для хранения и редактирования DNS записей. Эту курсовой проект. Начал вот думать над структурой базы. Пришел к выводу, что усложнять не стоит, а просто хранить каждый домен в его отдельной таблице без внешних ключей и ссылок между таблицами (тем более что у MyISAM с этим беда). По структуре таблицы - просто запихать туда все возможные поля какие могут быть у DNS записи любого типа. Первичный ключ auto-id. Нормализация, кажется, соблюдается...

Необходимо предусмотреть возможность сохранения очередности хранимых записей чтобы правильно расставлять всякие ORIGIN. Думаю реализовать это через организацию однонаправленного списка - поставить дополнительное поле "next" в котором прописывать номер первичного ключа след. записи. Тут еще не решил что оптимальнее - однонаправленный список или двунаправленный. Надо смотреть сколько SQL запросов надо использовать в обоих случаях и что оптимальнее.

Вот тут сразу воспро - какой SQL запрос затратнее по ресурсам SELECT или UPDATE?
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Структура таблицы для хранения DNS записей.

Непрочитанное сообщение zg » 2010-02-11 18:41:38

terminus писал(а):Вот тут сразу воспро - какой SQL запрос затратнее по ресурсам SELECT или UPDATE?
эм.... они же разные функции выполняют
terminus писал(а):это через организацию однонаправленного списка - поставить дополнительное поле "next" в котором прописывать номер первичного ключа след. записи
ну да, можно и ноутбуком гвозди заколачивать.
terminus писал(а):Первичный ключ auto-id. Нормализация, кажется, соблюдается...
блин, тут решение из двух таблиц - домены и записи со связью один ко многим. Зачем лес городить... :unknown:

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Структура таблицы для хранения DNS записей.

Непрочитанное сообщение terminus » 2010-02-11 19:24:39

zg писал(а):эм.... они же разные функции выполняют
ну я тут прикинул алгоритмы проведения изменений в таблице, когда список однонаправленные и, когда двунаправленный. Там по разному выходит и количество селектов и апдейтов разное. селект наверно затратнее?
zg писал(а): ну да, можно и ноутбуком гвозди заколачивать.
ну а как еще сохранить в таблице структуру оригинального файла зоны чтобы все строки были на своих местах? данные из базы надо будет дампить в файл для того чтобы с ними работал сервер. хотя... может просто номера строк ставить в отдельном поле?
zg писал(а): блин, тут решение из двух таблиц - домены и записи со связью один ко многим. Зачем лес городить... :unknown:
ну как бы запись - это сущность, и у нее в зависимости от типа может быть много атрибутов... в общем то тип тоже можно считать атрибутом. поэтому как бы напрашивается решение все в одну таблицу запихать... ну а если делать с отношениями то тогда не понятно как проще ораннизовать таблицы с доменами и записями различных типов...
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Структура таблицы для хранения DNS записей.

Непрочитанное сообщение zg » 2010-02-11 21:48:22

terminus писал(а):ну я тут прикинул алгоритмы проведения изменений в таблице, когда список однонаправленные и, когда двунаправленный.
мммм... у меня расчёт стоимости проживания по 6 тыс. номеров, 600 отелей, за 30 дней проживания, примерно по 1000 сезонам идёт максимум три секунды... Признайся, у тебя пара сотен миллионов доменов? :smile:
terminus писал(а):ну а как еще сохранить в таблице структуру оригинального файла зоны чтобы все строки были на своих местах?
ордер задай
terminus писал(а):ну как бы запись - это сущность, и у нее в зависимости от типа может быть много атрибутов... в общем то тип тоже можно считать атрибутом.
эм... :smile: это где тебя так научили?

нужно всего две таблицы - домены и записи по доменам. Всё, что относится к домену, пихай в таблицу доменов, всё что к записи - пихай в таблицу записей... Не надо тут ничего мудрить и слова говорить :unknown:

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Структура таблицы для хранения DNS записей.

Непрочитанное сообщение terminus » 2010-02-12 10:36:43

Мнда - интересно.

Я тут посмотрел как сделано в PowerAdmin для PowerDNS:

Код: Выделить всё

CREATE TABLE domains (
id INT auto_increment,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
primary key (id)
);

Код: Выделить всё

CREATE TABLE records (
id INT auto_increment,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(6) DEFAULT NULL,
content VARCHAR(255) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
primary key(id)
);
только две таблицы в базе - принадлежность записи к домену определяется по его id в таблице записей.

Я смотрю на эту структуру и не совсем понятно почему там именно так. Ведь типов записей в DNS много, и атрибутов у них тоже много и разных. Выходит, что если хранить записи только в одной таблице, то нарушается нормализация так как атрибуты будут не атомарны - все пойдет в поле content. В голову лезет схема создать по отдельной таблице для каждого типа записи.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Структура таблицы для хранения DNS записей.

Непрочитанное сообщение zg » 2010-02-12 21:39:50

terminus писал(а):ыходит, что если хранить записи только в одной таблице, то нарушается нормализация так как атрибуты будут не атомарны
ммм... переведи
terminus писал(а):только две таблицы в базе
:bn:

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Структура таблицы для хранения DNS записей.

Непрочитанное сообщение terminus » 2010-02-12 21:55:46

ммм... переведи
Ну как - первая нормальная форма таблицы это, когда все атрибуты атомарны и не повторяются, нет повторяющихся картежей, ключевые атрибуты не имеют значения null.

например при составлении таблицы Сотрудник, Ф.И.О. чкловека нельзя писать в один атрибут, а надо сделать три - чтобы каждый атрибут сидел в своем поле.

Так же скажем для записи DNSKEY - вид у нее такой:

Код: Выделить всё

ripe.net.        3379 IN    DNSKEY 257 3 5 (
                            AwEAAa/KVVdwmvrpdIP650gGoFqbx/W76h+APAJyxfpx
                            YIuT3AJqXy+6reUNzaTC89O6UBmFMPKFoLP9iavAcfgc
                            QnmI50XoCWRCnCF30CIIaIOMJ5ze4s8QIT0MPHDHM5l5
                            vBo87Bu6CUNn3FrmiC0LJd9fqvwvI3P4Z4GQ+xb06w3a
                            h3NOxUaqhizoDcqsFERY8QGYmiFb33cOIseYJNkufomf
                            PLkVeTC2R6CU6zNdFXbeNOqv7pTW1/jftlsH5L6mJEdk
                            71VHg4+Y2q/VuR7+s/Ju/VpVELS5ggcyjK2O0Ei5kPKg
                            m9zpOjSw4wJWhbp7PVTxX3PnvyxuRlOJs2ksdcE=
                            ) 
тут 257, 3, 5 и то что в скобках - отдельные атрибуты.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Структура таблицы для хранения DNS записей.

Непрочитанное сообщение zg » 2010-02-13 6:48:43

terminus писал(а):Ну как - первая нормальная форма таблицы это
ты где этого бреда нахватался?
terminus писал(а):например при составлении таблицы Сотрудник, Ф.И.О. чкловека нельзя писать в один атрибут, а надо сделать три - чтобы каждый атрибут сидел в своем поле.
а теперь очень подробно объясни зачем это делать, если фио не будет участвовать в поиске и будет просто информационных полем?
terminus писал(а):тут 257, 3, 5 и то что в скобках - отдельные атрибуты.
лучше оперируй понятием "достаточность".

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Структура таблицы для хранения DNS записей.

Непрочитанное сообщение terminus » 2010-02-13 8:26:10

ты где этого бреда нахватался?
Так учили - в рамках курса БД. Вдалбливали, что нормализовывать таблицы надо до третьей нормальной формы чтобы изблежать появления аномалий вставки, изменения и удаления данных.
а теперь очень подробно объясни зачем это делать
Я как бы не претендую :pardon: далаю как научили. Там под это какая-то теория подведена была.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Структура таблицы для хранения DNS записей.

Непрочитанное сообщение zg » 2010-02-13 9:13:56

terminus писал(а):нормализовывать таблицы надо до третьей нормальной формы чтобы изблежать появления аномалий вставки, изменения и удаления данных.
лучше бы вам вдалбливали это оперируя понятиями целостность базы и рассказывали как её сохранить, здавая правильную структуру таблиц.
terminus писал(а):далаю как научили
ммм для муси достаточно нескольких общих понятий:
1. отношения - один к одному, один ко многим, многие ко многим
2. ключи ака индексы
3. типы данных

на этом теорию по базе данных можно и закончить. Всё остальное дело техники.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Структура таблицы для хранения DNS записей.

Непрочитанное сообщение terminus » 2010-02-28 11:48:35

Возник еще один вопрос по поводу выбора между MyISAM и InnoDB.

Почему чаще выбырают тип таблиц MyISAM хотя в них нет возможности использовать внешние ключи и всякие каскадные удаления?

Вот например кусок кода из postfixadmin - как там происходит удаление домена:

Код: Выделить всё

elseif ($fTable == "domain")
{
    authentication_require_role('global-admin');
    $fWhere = 'domain';
    $result_domain_admins = db_delete ($table_domain_admins,$fWhere,$fDelete);
    $result_alias = db_delete ($table_alias,$fWhere,$fDelete);
    $result_mailbox = db_delete ($table_mailbox,$fWhere,$fDelete);
    $result_log = db_delete ($table_log,$fWhere,$fDelete);
    if ($CONF['vacation'] == "YES")
    {
        $result_vacation = db_delete ($table_vacation,$fWhere,$fDelete);
    }
    $result_domain = db_delete ($table_domain,$fWhere,$fDelete);

    if (!$result_domain || !domain_postdeletion($fDelete))
    {
        $error = 1;
        $tMessage = $PALANG['pAdminDelete_domain_error'];
    }
    else
    {
        $url = "list-domain.php";
        header ("Location: $url");
    }
} # ($fTable == "domain")
он проходит по всем таблицам где может быть значение этого домена и удаляет записи вручную. А если бы типы таблиц в базе были бы InnoDB то удалив запись в таблице доменов она бы сама каскадно поудаляляля бы все связанные с ней записи отовсюду.

Так почему же люди замарачиваются с MyISAM? :unknown:
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Структура таблицы для хранения DNS записей.

Непрочитанное сообщение Alex Keda » 2010-02-28 12:32:10

работает быстрее.
Убей их всех! Бог потом рассортирует...