какова общая схема для разрешения нескольких «типов» данных, которые имеют одного и того же родителя - PullRequest
1 голос
/ 11 марта 2012

Каков стандартный способ хранения `` подтипов '', если вы используете в реляционных базах данных, таких как MySQL?

В качестве примера, подумайте о фиде одного пользователя в Facebook. Все, что он содержит, - это «записи», но эти записи могут значительно различаться по типу и тому, что нужно хранить. Например, для статуса может потребоваться VARCHAR(255), тогда как для изображения может потребоваться BLOB, а для заметки - TEXT.

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


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

Ответы [ 2 ]

0 голосов
/ 11 марта 2012

Я бы создал отдельные таблицы для каждого типа (т.е. статус, заметка и т. Д.) И использовал бы таблицу, чтобы связать записи с пользователями с тремя столбцами - идентификатор пользователя, тип элемента, идентификатор элемента.Затем используйте тип элемента, чтобы выяснить, к какой таблице присоединиться.Тогда все данные могут быть сохранены как правильный тип, и соответствующая индексация обеспечит хорошую работу соединений.

0 голосов
/ 11 марта 2012

Я думаю, что вы называете подтипами - это иерархия. Записи на самом деле являются абстрактными сущностями, а конкретные сущности: Статус , Изображение и Независимо от . Таким образом, у пользователя может быть много записей, которые будут как-то «сопоставлены» с одной из этих сущностей.

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

...