2015-01-09 3 views
0

Рассмотрим следующий гипотетический сценарий:базы данных по уходу за детьми Таблица Лучшая практика

Objecta 1 - * ObjectB ObjectC 1 - * ObjectB ObjectD 1 - * ObjectB

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

Objecta ObjectB ObjectC ObjectD ObjectA_ObjectB ObjectC_ObjectB ObjectD_ObjectB

... против (один ребенка таблицы с несколькими обнуляемых столбцами) ...

ObjectB ObjectAID (обнуляемый) ObjectCID (обнуляемые) ObjectDID (обнуляемый)

У меня есть случай, когда объекты 7+ могут иметь много связанных с ними объектов ObjectB.

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

+0

Есть ли способ объяснить более четко или дать конкретный пример? Я понимаю концептуально то, что вы просите, но нет ни одного, глобального, правильного ответа - это зависит от множества факторов. Например, характер данных, требуемые выходы и т. Д. – radshop

+0

В этом случае мне нужно прикрепить примечание к кучке разных типов объектов (уровней) в рамках проекта. Это дает достаточно контекста? – user472292

+0

Таким образом, объект B является запиской, и каждая заметка может быть связана с 1 или более объектами A, C, D E ... Это правильно? – radshop

ответ

0

Создать таблицу с 3 колонками:

  • object_b_id
  • other_object_id
  • other_object_type

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

Select * from ObjectX as x 
Join ObjectBReferences as r 
on x.id = r.other_object_id and r.other_object_type = 'X' 
Join ObjectB b 
    on r.object_b_id = b.id 

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

+0

Я думал об этом маршруте как о одном из вариантов, но проблема в том, что вы теряете любые отношения (FK, навигационные свойства и т. Д.). Поэтому это не будет работать в моей нынешней ситуации. – user472292