Как спроектировать БД, которая имеет много-много-много отношений - PullRequest
0 голосов
/ 22 сентября 2011

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

У меня есть сущность, которая имеет имя и описание.

ЭтоСущность может иметь много дочерних объектов, имеющих тип Entity.

Так что это похоже на рекурсивное отношение.Теперь уверен, как правильно проектировать БД.

Создать ли вторую таблицу или как?

Обновление: одна сущность может иметь только одну родительскую сущность или не иметь родителей.

Ответы [ 4 ]

0 голосов
/ 22 сентября 2011

Редактировать: на основе обновления вопроса мое предлагаемое решение выделено жирным шрифтом, ниже:

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

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

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

Если это отношение «многие ко многим» с несколькими родителями, то вы создадите новую таблицу entity_links со столбцами parent_entity_id и child_entity_id.Вы управляете отношениями, вставляя и удаляя строки в этой таблице.

0 голосов
/ 22 сентября 2011

Для отношения «многие ко многим» вы захотите, чтобы таблица пересечений делегировала отношения между собой

Например,

Entities       OtherEntities
--------       -------------
ID       ----> EntityID1
Name     <---- EntityID2
Descrip   
0 голосов
/ 22 сентября 2011

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

0 голосов
/ 22 сентября 2011

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

entity
======
id
name
description

xref_entity_subentities
=======================
parent_entity_id (FK references entity)
child_entity_id (FK references entity)

Я не могу говорить с базовыми данными.

...