Sql 必须能够同时包含外键和特殊值的链接表列

Sql 必须能够同时包含外键和特殊值的链接表列,sql,database,database-design,relational-database,database-schema,Sql,Database,Database Design,Relational Database,Database Schema,我需要在数据库中表示以下信息(简化): 一套“账单”。(在表票据中) 一组“代表”。(在表MPs中) 每个法案的作者。 如果只有“代表”可以是作者,那么这将是一个简单的链接表,其中包含账单和议员的外键 还有一个(只有一个)其他“实体”也可以是法案的作者,因此: 我可以重新使用NULL来表示“实体”,但这很难看 我可以简单地忘记外键约束,但这更难看 根据数据库理论,表示这些信息的正确方法是什么 有一个表格linktable\u authors链接“代表”编写的“法案”的Bills和MPs,

我需要在数据库中表示以下信息(简化):

  • 一套“账单”。(在表
    票据中
  • 一组“代表”。(在表
    MPs
    中)
  • 每个法案的作者。
    • 如果只有“代表”可以是作者,那么这将是一个简单的链接表,其中包含
      账单
      议员
      的外键
    • 还有一个(只有一个)其他“实体”也可以是法案的作者,因此:
      • 我可以重新使用
        NULL
        来表示“实体”,但这很难看
      • 我可以简单地忘记外键约束,但这更难看
  • 根据数据库理论,表示这些信息的正确方法是什么

    有一个表格
    linktable\u authors
    链接“代表”编写的“法案”的
    Bills
    MPs
    ,另一个表格
    由“实体”编写,仅用于“实体”编写的“法案”(如果我非常确定以后不会出现其他实体),是否合适

    奖金问题:
    如果还有一个表“其他实体”,并且“其他实体”和“代表”都可以是“法案”的作者,该怎么办。让子实体的主键代表其他实体成为作者,以创建一种类型的关系。将属性AuthorType添加到Authors以区分子类型和冲突类型。将作者共有的所有属性放置在作者实体中


    顺便说一句:NULL永远不表示“其他已知值”。在其他一些选择中,它可以合理地表示“不适用”或“未知”,但赋予它“其他已知值”的语义肯定是设计拙劣的标志

    使用PKAuthorID定义实体作者。让子实体的主键代表其他实体成为作者,以创建一种类型的关系。将属性AuthorType添加到Authors以区分子类型和冲突类型。将作者共有的所有属性放置在作者实体中


    顺便说一句:NULL永远不表示“其他已知值”。在其他一些选择中,它可以合理地表示“不适用”或“未知”,但赋予它“其他已知值”的语义肯定是设计拙劣的标志

    我猜这是在回答我的“奖金问题”,但是对于原来的问题(只是一个可能的作者不是一个代表)不是一个过激的问题吗?一旦你提出了一个允许奖金情况的商业规则的存在,你就把所有的理由都扼杀了,只考虑更简单的情况。除非有压倒性的理由不这样做,否则总是针对更普遍的情况进行设计;因为你比你想象的要快。我同意,但出于教育目的,我真的对原始问题的解决方案感兴趣。但作者可以是代表或其他作者。第一个问题的正确解决方法是不要假设只有一个作者,我理解。我将等待一点,并可能选择这作为接受的答案。另一方面,您能否补充一下,我在修改后的问题中提出的两表解决方案是否存在明显问题?我想这是在回答我的“额外问题”,但对于原始问题(只有一位可能的作者不是代表)来说,这不是一个过分的回答吗一旦你提出了一个允许奖金情况的商业规则的存在,你就把所有的理由都扼杀了,只考虑更简单的情况。除非有压倒性的理由不这样做,否则总是针对更普遍的情况进行设计;因为你比你想象的要快。我同意,但出于教育目的,我真的对原始问题的解决方案感兴趣。但作者可以是代表或其他作者。第一个问题的正确解决方法是不要假设只有一个作者,我理解。我将等待一点,并可能选择这作为接受的答案。另一方面,你能否补充一下,我在修改后的问题中提出的两表解决方案是否存在明显问题?