我想问一下我正在做的项目。
我有两个表,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
我可以在它们之间建立关系吗?或者我必须在它们之间建立一个表?
发布于 2018-10-17 00:46:40
闻起来像是一对多的关系。这是通过在辅助表中使用corporate_id
(而不是名称)来实现的。并为该列建立索引。
然后,您可以使用JOIN
表来查找拥有子公司的公司的信息,或者查找给定公司的所有子公司。
还有其他需要考虑的事情。“公司”和“子公司”实际上是同一类型的实体,不是吗?甚至您的模式也表明了这一点;看到这些列实际上是相同的了吗?所以..。您可能应该只有一个表,并将两个表都放入其中。它将有一个id
(类似于corporate_id
和subsidiary_id
)和一个parent_id
。
parent_id
是指向同一表中另一行的id
的链接。它是从子公司到公司的纽带。如果是0
,那么您看到的是一家公司。非0
指的是子公司。
在这个论坛上搜索parent_id
;你可能会发现很多其他的例子在做同样的事情。
发布于 2018-10-19 05:41:51
这是递归关系的候选者。在这种情况下,您不需要两个表,因为这两个表基本上具有相同的列。你只需要创建一个外键定义为ms_corporates.corporate_id => ms_corporates.parent_corporate_id的"parent_corporate_id“。这是对同一个表的自我引用。根据定义,如果"parent_corporate_id“中有一个值,那么只有当一个子公司永远不能有多个母公司时,它才是一个subsidiary.This。你需要做的就是把"corporate_“改成更通用的代码。因为"corporate_name“不是ms_corporates中的主键,所以您当前的FK将不起作用。您不能在任何列上创建FK,它必须是“贡献”表中的主列,在本例中为ms_corporates.corporate_id。
https://stackoverflow.com/questions/52819257
复制相似问题