【问题标题】:What SQL relationship suits here?这里适合什么 SQL 关系?
【发布时间】:2011-03-03 01:20:39
【问题描述】:

问候,

我将这三个表命名为 - 人员、员工、客户。 我应该使用以下标准的 SQL 关系: 1. Person 持有另外两张表的初步数据。 2. 没有员工-人可以是客户-人。

要添加更多内容,我正在使用 MySQL 进行设计。

对于person->employee和person->customer的关系,我应该使用1-1还是1-*? 非常感谢您的回复。

谢谢!

【问题讨论】:

  • 看起来您需要相当于 1-* 的值,因为您不能使用 1-1,因为从人员到另一个表的链接将是客户表或员工表.
  • 员工不能做客户?好吧,这是获得员工折扣的一种方式!
  • @John:如果我要使用 1-*,对于不同的 CustomerPK 或 EmployeePK,PersonFK 上将存在重复项。
  • 基本上,您将有一个从客户到人的受约束外键和一个从员工到人的外键......因此,客户表必须有一个现有的人员记录,而员工表将有有一个现有的人员记录,但是......人员记录不必有一个现有的客户或员工记录......您无法设置从人员到其他 2 个表的外键,因为外键需要从一张桌子到一张桌子......

标签: mysql sql database database-design


【解决方案1】:

您基本上在 Person 和其他两个表之间存在 1-(0 或 1)关系。 Customer 和 Employee 互斥的事实可以通过触发器来强制执行。您可以查看Section 3.6.3 of this explanation of relationship types 了解更多信息。这是Wikipedia article on exclusive relationships

【讨论】:

  • 你提到的 mySQL 约束是什么?
  • 我修改了我的答案以将约束更改为触发器,这对于这种类型的(完整性约束)会更正确。
  • @ondedaywhen:我不能说它是对表的约束。但是一个符合标准的条件说。
【解决方案2】:

这是 sql-server 的“tableinheritance”示例,但也适用于 mysql: http://www.sqlteam.com/article/implementing-table-inheritance-in-sql-server

【讨论】:

  • 在表继承中,是否解决了我选址的第二个标准?
【解决方案3】:

您的案例看起来像是 gen-spec 设计模式的示例。有关此问题的先前讨论,请点击链接。 This should be simple. But how do I design this?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多