作为新手,我正在设计一个联系人管理数据库。我遇到了以下情况:我已经创建了一个表 company 公司信息。在信息中,我想包括母公司,如果他们有一个(例如:法拉利是公司之一,但其母公司是菲亚特,这也是一个记录在 company 表)。我不知道该如何处理这个问题。我应该添加一个 parent_company 列到 company 表和自引用还是应该创建一个新表来存储父子关系?
company
parent_company
pcrecxhr1#
我建议您在company表中添加parent_company(nullable)列,并用company id引用它。因为我相信子公司不会有多个父公司,所以不需要创建新表。对于多对多关系,你需要一张新table。您可以这样创建外键引用
ALTER TABLE company ADD COLUMN parent_company INT UNSIGNED NULL, ADD FOREIGN KEY fk_parent_company REFERENCES company(id)
如果表id具有unsigned属性,请使用unsigned。基本上,除了使新列可以为null之外,您必须遵循新列的确切列属性。希望这有帮助。
l7wslrjt2#
管理分层数据很棘手,特别是在mysql中,它实际上没有内置的支持。如果你事先知道,几乎所有的公司都是单亲家庭,而且到处都有一家母公司,那么添加一个 parent_company_id 到你的table上去。然而,情况可能会变得更加复杂。这就是为什么我建议您考虑一些关于如何存储数据的替代方案。例如,可以方便地将整个层次结构存储到母公司。这是一篇关于存储分层数据的好文章。
parent_company_id
2条答案
按热度按时间pcrecxhr1#
我建议您在company表中添加parent_company(nullable)列,并用company id引用它。因为我相信子公司不会有多个父公司,所以不需要创建新表。对于多对多关系,你需要一张新table。
您可以这样创建外键引用
如果表id具有unsigned属性,请使用unsigned。基本上,除了使新列可以为null之外,您必须遵循新列的确切列属性。
希望这有帮助。
l7wslrjt2#
管理分层数据很棘手,特别是在mysql中,它实际上没有内置的支持。
如果你事先知道,几乎所有的公司都是单亲家庭,而且到处都有一家母公司,那么添加一个
parent_company_id
到你的table上去。然而,情况可能会变得更加复杂。这就是为什么我建议您考虑一些关于如何存储数据的替代方案。例如,可以方便地将整个层次结构存储到母公司。这是一篇关于存储分层数据的好文章。