主表可以与另一个主表有关系吗?

xfb7svmp  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(350)

我想问一下我正在做的项目。
我有两张table, ms_corporates 以及 ms_subsidiaries ,一个法人可以有多个子公司,但一个子公司只能有一个法人。
这是我的table:

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

我能在他们之间建立关系吗?还是我必须在他们之间建立一张table?

vfh0ocws

vfh0ocws1#

闻起来像是一对多的关系。这是通过 corporate_id (而不是名称)在子表中。并索引该列。
那你就可以了 JOIN 用于查找拥有子公司的公司的信息或查找给定公司的所有子公司的表。
还有别的事情要考虑。“公司”和“子公司”其实是同一类型的实体,不是吗?甚至你的模式也表明了这一点;看看这些列实际上是如何相同的?所以。。。你应该只有一张table,把两张都放进去。它将有一个 id (阿拉) corporate_id 以及 subsidiary_id )和一个 parent_id . parent_id 是指向 id 同一表中另一行的。它是子公司与公司之间的纽带。如果是的话 0 ,那么你看的是一家公司。非- 0 指子公司。
搜索此论坛 parent_id ; 你可能会发现很多其他的例子做同样的事情。

qhhrdooz

qhhrdooz2#

这是递归关系的候选者。在这种情况下,您不需要两个表,因为两个表本质上具有相同的列。您只需创建一个外键为ms\u corporates.corporate\u id=>ms\u corporates.parent\u corporate\u id的“parent\u corporate\u id”。这是对同一个表的自引用。根据定义,如果“母公司\公司\ id”中有一个值,那么它就是子公司。只有子公司不能有多个母公司时,这才是正确的。你所需要做的就是把“公司”去掉,换成更通用的东西。你现在的fk也不起作用,因为“公司名称”不是微软公司的主键。不能在任何列上创建fk,它必须是“contribution”表中的主列,在本例中为ms\u corporates.corporate\u id。

相关问题