Вопрос проектирования базы данных MySQL - хранение списков / массивов индексов - PullRequest
2 голосов
/ 03 июля 2011

Мне интересно, как хранить список индексов идентификаторов для каждого идентификатора в таблице. Они эффективно сформируют «отношения» между идентификаторами. Вот основная таблица на данный момент:

таблица основных:

  • идентификатор, целое число, первичный ключ

  • имя, варчар

  • text_info_1, varchar

  • text_info_2, varchar

А теперь для каждой строки будет список идентификаторов других строк, который покажет мне, как одна строка связана с другой. Например, строка с идентификатором # 5 может быть связана с идентификаторами 6,7,9,25, ... и т. Д.

Вот варианты, которые я рассмотрел:

  1. Создать новый столбец в виде текстового поля и сохранить сериализованный список этих целочисленных значений. Тогда просто десериализуйте, когда я хочу их.

  2. Создайте новую таблицу под названием «отношения» со столбцами отношение_ид (первичный ключ с автоматическим приращением int), имя1, имя2, [и необязательные другие поля, указывающие тип отношения, что было бы неплохо].

Я чувствую, что вариант 1 немного взломан. Я сделал это раньше, и это работает, но, возможно, вариант 2 лучше дизайн?

Хотя я беспокоюсь о скорости. С опцией 1 я могу просто сделать SELECT отношения из основного WHERE id = $ id, а затем снять сериализацию результата и получить мой массив с целочисленными индексами. Но с вариантом 2 мне придется просмотреть таблицу, которая будет во много раз (в 10 раз или более) больше, и выполнить «ВЫБОР name1, name2 ОТ ОТНОШЕНИЙ».

Скорость - мой главный приоритет. Я не уверен, какой из них лучше для космоса, хотя мне было бы интересно узнать.

Так какой вариант мне выбрать? Есть ли другие хорошие варианты, которые я не рассмотрел? Я также был бы признателен за несколько хороших общих советов по проектированию баз данных!

Спасибо большое.

1 Ответ

0 голосов
/ 03 июля 2011

Второй вариант лучше. Если вы хотите стать лучше в разработке базы данных, вам следует прочитать о нормализации базы данных. К сожалению, все материалы, которые я использовал, были не на английском языке. Это ссылка на Википедию может быть началом.

Таблица Отношения :

relation_id (int auto increment primary key)
id_one (int)
id_two (int)
...

Вместо хранения имен в таблице отношений вы сохраняете идентификаторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...