物品(item_id, ...)
仓库(inventory_id, ...)
库存(item_id [FK], inventory_id [FK], ...)
供应商(delivery_id, ...)
订单(order_id [PK], item_id [FK], ...)
仓库之间可以下订单,仓库也可以给供应商下订单,在订单中要保存订单双方 ID,如果这两个值都需要使用外键约束应该如何合理设计?
1
abcbuzhiming 2018-10-13 13:17:30 +08:00 1
没啥合理不合理的,你的业务就是需要外键约束的话那就是需要,但是现在的一个普遍做法就是约束在应用层实现,数据库只当仓库用,维护起来省事很多
|
2
Oathbinder OP @abcbuzhiming 比较好奇从数据库角度来说如何实现外键约束?只看业务需求的话用应用层约束也可以,现在只是好奇问一下
|
3
abcbuzhiming 2018-10-13 17:05:54 +08:00
@Oathbinder 数据库的外键不就是那 3 种模式吗,你引用的键之间互相有联系,要么联动删除,要么不允许删除
|
4
ruoxie 2018-10-13 17:12:04 +08:00
很久不用物理外键了,都是程序里实现逻辑外键
|
5
carlclone 2018-10-13 17:54:37 +08:00
朋友,21 世纪了,项目里用外键怕不是要被打
|
6
rogwan 2018-10-13 19:38:55 +08:00 via Android
删除外键,适当冗余。
|
7
paragon 2018-10-13 20:04:01 +08:00
楼上一堆不外键的还用关系数据库干嘛呢?
|
8
zjsxwc 2018-10-13 20:07:40 +08:00 via Android
订单(order_id [PK], item_id [FK], in_inventory_id [FK] ,out_delivery_id [FK],out_inventory_id [FK] )
有什么问题吗? |
9
zjsxwc 2018-10-13 20:10:20 +08:00 via Android
楼上一堆鄙视用外键的是什么鬼,现在都自动生成代码了,外键用不用是代码生产机的活,8102 年了我其实老早就不关心外键了,因为肯定会被程序员毫无察觉的用外键。
|
10
xuanbg 2018-10-13 20:24:26 +08:00
一个字段对应多表 ID 这种情况无法使用物理外键。解决的方法很简单,要么把这个字段分拆到两个扩展表里面去,要么不使用物理外键。
|
11
Oathbinder OP @xuanbg 具体怎么拆分呢
|
14
luozic 2018-10-15 14:03:34 +08:00
平行扩展或者数据库迁移就知道乱用外键的坑了
|