首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >主表可以与另一个主表建立关系吗?

主表可以与另一个主表建立关系吗?
EN

Stack Overflow用户
提问于 2018-10-15 22:42:34
回答 2查看 31关注 0票数 0

我想问一下我正在做的项目。

我有两个表,ms_corporatesms_subsidiaries,术语是一个公司可以有多个子公司,但一个子公司只能有一个公司。

这是我现在的桌子:

代码语言:javascript
运行
复制
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

我可以在它们之间建立关系吗?或者我必须在它们之间建立一个表?

EN

回答 2

Stack Overflow用户

发布于 2018-10-17 00:46:40

闻起来像是一对多的关系。这是通过在辅助表中使用corporate_id (而不是名称)来实现的。并为该列建立索引。

然后,您可以使用JOIN表来查找拥有子公司的公司的信息,或者查找给定公司的所有子公司。

还有其他需要考虑的事情。“公司”和“子公司”实际上是同一类型的实体,不是吗?甚至您的模式也表明了这一点;看到这些列实际上是相同的了吗?所以..。您可能应该只有一个表,并将两个表都放入其中。它将有一个id (类似于corporate_idsubsidiary_id)和一个parent_id

parent_id是指向同一表中另一行的id的链接。它是从子公司到公司的纽带。如果是0,那么您看到的是一家公司。非0指的是子公司。

在这个论坛上搜索parent_id;你可能会发现很多其他的例子在做同样的事情。

票数 0
EN

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52819257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档