egg*_*rop 18 database foreign-key-relationship
Customers
customer_id
Orders
order_id
customer_id fk
Run Code Online (Sandbox Code Playgroud)
如果我有两个表并在Orders表中的customer_id上定义了一个外键,通过允许它为null,我说我可以订购一个没有客户关联的订单.因此,可以为空的外键的概念似乎与外键的目的不一致,即强制执行此约束.
是否有一个简单的例子表明可以使用可以为空的外键?或支持允许他们的论据?
n3r*_*3rd 48
想象一下拥有团队TODO的表格.如果尚未将TODO分配给团队成员,则其user_id
为NULL
.如果不是,NULL
它是users
表的外键.
mol*_*olf 16
没有,空的外键是永远需要的.
您始终可以规范化可选的1-many关系.举个例子,你可能有以下表格:
Customers: customer_id, ...
Orders: order_id, ...
OrdersCustomers: order_id, customer_id
UNIQUE(order_id)
Run Code Online (Sandbox Code Playgroud)
这两个独特的约束条件确保一个订单只能属于一个客户,而且永远不会属于同一个客户两次.
是否应该始终规范这种关系是一个不同的故事.在某些情况下,非规范化可能会导致更简单的实现.
因此,可以为空的外键的概念似乎与外键的目的不一致,即强制执行此约束.
外键的目的是明确概念,Orders表中的随机整数实际上是指Customers表中的项.实际上,强制执行作为约束是偶然的.
归档时间: |
|
查看次数: |
19587 次 |
最近记录: |