【问题标题】:Database design ensure one to one relationship数据库设计确保一对一关系
【发布时间】:2018-09-29 03:52:22
【问题描述】:

我试图了解数据库设计中类表继承的局限性。例如,如果我有这样的架构,我如何确保学校字段表或非营利表中的多行不引用相同的联系人 ID

Contact
--------
id - PK 
fname - String
lname - String
email - String

School Field
--------------
id - PK
contact_id - FK
notes - String

Non Profit Field
-----------------
id - PK
contact_id - FK
donation - unsigned int

【问题讨论】:

  • 那么如果 SchoolField 中的记录引用 Contact 中的 ID 1,NonProfitField 中的记录是否可以引用contactID 1?
  • 是的,如果发生这种情况也没关系

标签: mysql sql database database-design database-schema


【解决方案1】:

我会推荐一种不同的方法。

Entity
-------------- 
id - PK 
Field_Type_ID - FK 
contact_id - FK 
notes - String
donation - unsigned int (nullable)

Contact
-------------- 
id - PK 
fname- String
lname- String
email- String

Field_Type
-------------- 
id - PK 
Description- FK 
notes - String

通过这样做,如果您最终获得更多“字段”类型,则无需添加更多表。您只需将一条新记录添加到 Field_Type 表中。然后,为了强制执行您想要的行为,您在 Entity 上添加一个唯一约束,该约束同时查看 contactID 和 FieldTypeID。这将确保每个联系人只能链接到一个字段类型一次。

https://www.w3schools.com/sqL/sql_unique.asp

【讨论】:

  • 你能扩展字段类型表中的描述和注释吗?在字段类型表的上下文中,描述引用了什么,注释代表什么?
  • 描述将是“学校”和“非营利”。这样,如果您获得必须开始跟踪的新“字段”,则无需创建新表。注释没有任何意义,我只是从您的示例中复制的。
  • 那么这是否意味着 field_type_id = 'School' 的实体将捐赠为空?应用程序如何知道哪些列适用于哪些字段类型?因此,例如,如果我向实体添加新行,我怎么知道只更新字段类型 = 'school' 而不是捐赠的注释
猜你喜欢
  • 2015-08-05
  • 2014-11-06
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
相关资源
最近更新 更多