Самореферентные отношения - PullRequest
0 голосов
/ 03 мая 2018

В настоящее время я проектирую базу данных управления контактами как новичок. Я столкнулся со следующим сценарием:

Я создал таблицу company для информации о компании. В информацию, которую я хочу включить, в материнскую компанию, если она есть (например, Ferrari является одной из компаний, но ее материнской компанией является Fiat, которая также является одной записью в таблице company).

Я не уверен, как мне следует подойти к этой проблеме. Должен ли я добавить столбец parent_company в таблицу company и самоссылку ИЛИ создать новую таблицу для хранения отношений родитель-потомок?

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Управлять иерархическими данными сложно, особенно в MySQL, который действительно не имеет встроенной поддержки.

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

Однако ситуация может стать более сложной. Вот почему я бы посоветовал вам рассмотреть некоторые альтернативные способы хранения данных. Например, может быть удобно сохранить всю иерархию в материнской компании. Здесь - хорошая статья о хранении иерархических данных.

0 голосов
/ 03 мая 2018

Я бы порекомендовал добавить столбец parent_company (nullable) в таблицу компаний и связать его с идентификатором компании. Как я полагаю, у вас не будет нескольких материнских компаний для дочерней компании, поэтому нет смысла создавать новую таблицу. Для многих со многими вам понадобится новая таблица.

Вы можете создать ссылку на внешний ключ, как это

ALTER TABLE company ADD COLUMN parent_company INT UNSIGNED NULL, ADD FOREIGN KEY fk_parent_company REFERENCES company(id)

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

Надеюсь, это поможет.

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