【问题标题】:mysql relationships, make them optional?mysql关系,使它们成为可选的?
【发布时间】:2013-01-21 16:07:38
【问题描述】:

你好我的mysql关系如下,

如您所见,company 表与 members 表具有 1:n 的关系。然而,这似乎是隐含的,这意味着当我尝试将成员保存到我的数据库时,他们必须与公司相关联,否则不会发生插入。

基本上,我们用户注册流程的架构是,您可以是个人,也可以是公司。如何让我的数据库设计反映这一点,所以两个表之间的关系不是必须的。

【问题讨论】:

  • 当您需要测试它们是否属于公司时,您能否将companies_idLEFT JOIN 设置为可空的companies 表?

标签: mysql database database-design polymorphic-associations erd


【解决方案1】:

这不是一个伟大的设计。

您应该阅读Party ModelTable Inheritance 以了解经久耐用的设计。骷髅:

PARTY
id

ORGANIZATION : PARTY
name
doing_business_as

INDIVIDUAL : PARTY
first_name
last_name

PARTY_RELATIONSHIP
from_party_id references party(id)
to_party_id references party(id)
from_date
to_date

ORGANIZATION_CONTACT_RELATIONSHIP : PARTY_RELATIONSHIP

【讨论】:

    【解决方案2】:

    我认为您的架构与实际业务领域之间存在矛盾。如果某些用户与企业没有关联,则存在 0:n 关系,而不是 1:n 关系。

    在实践中,我已经看到了几种对此建模的方法。当然,最简单的方法是不创建外键关系——这就是业务领域的建议(个人用户与公司无关)。

    如果“企业”和“个人”客户之间存在显着差异,您可能会将不同的列分解为单独的表 - 因此您可能有“用户”和“企业用户”,其中企业信息所在的位置(包括链接到company_id)和“individual_users”,个人数据所在的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-04
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多