Создайте таблицу SQL, которая может иметь каскадные дочерние родительские отношения - PullRequest
0 голосов
/ 11 февраля 2020

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

Пример:

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

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

Мой вопрос Какой самый эффективный способ хранить такие данные и поддерживать отношения между каждым родителем и последующим ребенком? Пример будет высоко ценится.

1 Ответ

2 голосов
/ 11 февраля 2020

Простейшей моделью данных было бы дерево, подобное этому:

TABLE Entity (Id, Name, EntityTypeId, ParentEntityId NULL)
TABLE EntityType (Id, Name, ParentEntityTypeId NULL)

В более сложной модели, например, разные модели автомобилей, использующие одну и ту же модель двигателя (и неясно, говорите ли вы о моделях автомобилей или, указав c автомобили), столбец ParentEntityId будет заменен таблицей отношений:

TABLE Entity (Id, Name, EntityTypeId)
TABLE EntityHierarchy (Id, ParentEntityId, ChildEntityId)

Записи в таблице EntityHierarchy будут ограничены (на уровне приложения) деревом EntityTypes

В более сложной модели ParentEntityTypeId также будет заменен на иерархическую таблицу.

Если ваши сущности или их типы меняются со временем, вы также добавили бы диапазон DATE в любую из этих таблиц.

...