Может ли основная таблица иметь отношение к другой основной таблице? - PullRequest
0 голосов
/ 15 октября 2018

Я хочу спросить о своем проекте, над которым я работаю.

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

Это моя таблица прямо сейчас:

ms_corporates
-------------
corporate_id PK
corporate_name
corporate_address
corporate_phone

ms_subsidiaries
---------------
subsidiary_id PK
corporate_name FK
subsidiary_name
subsidiary_address
subsidiary_phone

Могу ли я пойти между ними или создать таблицу между ними?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Это кандидат на рекурсивные отношения.В этом случае вам не нужны две таблицы, поскольку обе таблицы по существу имеют одинаковые столбцы.Вам просто нужно создать «parent_corporate_id» с внешним ключом, определенным как ms_corporates.corporate_id => ms_corporates.parent_corporate_id.Это ссылка на одну и ту же таблицу.По определению, если есть значение в "parent_corporate_id", это дочерняя компания. Это верно только в том случае, если дочерняя компания НИКОГДА не может иметь более одного родителя.Все, что вам нужно сделать, чтобы заставить его работать, это удалить «corporate_» в нечто более общее.И ваш текущий FK не будет работать, потому что «имя_файла» не является первичным ключом в ms_corporates.Вы не можете создать FK для любого столбца, он должен быть основным из таблицы "contributing", в данном случае ms_corporates.corporate_id.

0 голосов
/ 16 октября 2018

Пахнет как отношение 1: много.Это реализуется с помощью corporate_id (не имя) в дополнительной таблице.И индексируйте этот столбец.

Затем вы можете JOIN таблицы, чтобы найти информацию о корпорации, которая владеет дочерней компанией, или найти все дочерние компании данной корпорации.

Есть что-то еще длярассматривать.«Корпорация» и «дочерняя компания» - это действительно один и тот же тип организации, не так ли?Даже ваша схема указывает на это;видите, как столбцы практически одинаковы?Итак ... У вас , вероятно, должен быть только один стол, и положить в него оба.Он будет иметь id (в стиле corporate_id и subsidiary_id), а parent_id.

parent_id является ссылкой на id другой строки в той же таблице.Это ссылка дочерней компании на корпорацию.Если это 0, то вы смотрите на корпорацию.Non- 0 означает дочернюю компанию.

Поиск на этом форуме по parent_id;вероятно, вы найдете множество других примеров, делающих то же самое.

...