Как вы храните переменные поля? - PullRequest
2 голосов
/ 07 октября 2010

У меня есть база данных, где есть комментарии, голоса, галереи, изображения и т. Д. Например, галереи и изображения можно комментировать, используя одну и ту же форму, тогда я буду хранить их в одной таблице, комментарий.

Мне интересно, как хранить эту информацию о типе в таблице комментариев? Использование типа ENUM, внешнего ключа для таблицы типов, жесткого кодирования при вставке и т. Д.?

Ответы [ 2 ]

2 голосов
/ 07 октября 2010

Внешний ключ против таблицы типов получит мой голос. Примерно так:

alt text

2 голосов
/ 07 октября 2010

Вероятно, есть несколько способов сделать это, сохранив внешние ключи.

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

Второй - иметь таблицу (скажем, commentables), которая содержит общие данные для всего, что можно комментировать.Каждая галерея или изображение имеет внешний ключ для уникальной соответствующей строки в комментариях.Каждая строка в таблице комментариев имеет внешний ключ для комментария, а также текст комментария, дату и т. Д.

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

Редактировать Вариант 3 аналогичен параметру1, но вместо того, чтобы иметь полные отдельные таблицы комментариев для каждого комментируемого типа, просто используйте отдельные ассоциативные таблицы для каждого комментируемого типа.

|comments|    |gallery_comments|   |image_comments |
 --------      ----------------     ---------------
|id  (pk)|    |comment_id  (fk)|   |comment_id (fk)|
|text    |    |gallery_id  (fk)|   |image_id   (fk)|
|date    |     ----------------     ---------------
|author  |
 --------

На мой взгляд, намного лучше, чем вариант 1.

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