Дизайн базы данных для "общих концепций" - PullRequest
1 голос
/ 26 ноября 2011

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

Подумайте, например, об объекте «Комментарий».Он должен быть применим ко многим видам различных объектов: фотография, действие, событие ... и он всегда имеет одинаковую структуру (автор, текст, inserttion_time, ...)

Первое решение Iбыло принято иметь отдельные таблицы для каждого вида комментариев: PhotoComments, EventComments и связывать их с соответствующими объектами, имеющими отношение один ко многим с (например) столбцом photo_id.

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

Есть ли какие-либонедостатки в такой конструкции?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2011

Один недостаток, который я могу вспомнить, связан с блокировкой таблицы.

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

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

0 голосов
/ 26 ноября 2011

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

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

Я бы пошел с одной таблицей комментариев (и, возможно, переместил бы автора в собственную таблицу, чтобы вы могли легко увидеть, какие комментарии принадлежат одному автору, не дублируя информацию об авторе в каждой записи)

...