自我引用关系

时间:2018-05-03 10:19:52

标签: mysql sql database

我目前正在设计一个新手的联系人管理数据库。我遇到了以下情况:

我为公司信息创建了一个表company。在我希望包含母公司的信息中,如果他们有一个(例如:法拉利是公司之一,但其母公司是菲亚特,这也是company表中的一条记录)。 p>

我不确定如何解决这个问题。我应该在parent_company表中添加company列并自我引用或者我应该创建一个新表来存储父子关系吗?

2 个答案:

答案 0 :(得分:2)

我建议您在公司表中添加parent_company(nullable)列,并使用公司ID引用它。因为我相信你不会为子公司拥有多家母公司,所以不要使用创建新表。对于很多人的关系,你需要一张新桌子。

您可以像这样创建外键引用

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

如果您的表ID具有UNSIGNED属性,请使用UNSIGNED。基本上,您必须遵循新列的精确列属性,除了使其可以为空。

希望这有帮助。

答案 1 :(得分:1)

管理分层数据很棘手,特别是在没有内置支持的MySQL中。

如果您事先知道几乎所有的公司都是单身人士,那么您就有了母公司,然后在您的餐桌上添加parent_company_id

然而,情况会变得更加复杂。这就是为什么我建议你考虑如何存储数据的一些替代方案。例如,将整个层次结构存储到父公司可能很方便。 Here是关于存储分层数据的好文章。