Oathbinder
V2EX  ›  数据库

如何避免数据库中一个属性外键引用多个表

  •  
  •   Oathbinder · Oct 13, 2018 · 3942 views
    This topic created in 2946 days ago, the information mentioned may be changed or developed.

    物品(item_id, ...)

    仓库(inventory_id, ...)

    库存(item_id [FK], inventory_id [FK], ...)

    供应商(delivery_id, ...)

    订单(order_id [PK], item_id [FK], ...)

    仓库之间可以下订单,仓库也可以给供应商下订单,在订单中要保存订单双方 ID,如果这两个值都需要使用外键约束应该如何合理设计?

    14 replies  •  2018-10-15 14:03:34 +08:00
    abcbuzhiming
    abcbuzhiming
    Oct 13, 2018❤️1
    1
    没啥合理不合理的,你的业务就是需要外键约束的话那就是需要,但是现在的一个普遍做法就是约束在应用层实现,数据库只当仓库用,维护起来省事很多
    Oathbinder
    Oathbinder
    OP
    Oct 13, 2018
    2
    @abcbuzhiming 比较好奇从数据库角度来说如何实现外键约束?只看业务需求的话用应用层约束也可以,现在只是好奇问一下
    abcbuzhiming
    abcbuzhiming
    Oct 13, 2018
    3
    @Oathbinder 数据库的外键不就是那 3 种模式吗,你引用的键之间互相有联系,要么联动删除,要么不允许删除
    ruoxie
    ruoxie
    Oct 13, 2018
    4
    很久不用物理外键了,都是程序里实现逻辑外键
    carlclone
    carlclone
    Oct 13, 2018
    5
    朋友,21 世纪了,项目里用外键怕不是要被打
    rogwan
    rogwan
    Oct 13, 2018 via Android
    6
    删除外键,适当冗余。
    paragon
    paragon
    Oct 13, 2018
    7
    楼上一堆不外键的还用关系数据库干嘛呢?
    zjsxwc
    zjsxwc
    Oct 13, 2018 via Android
    8
    订单(order_id [PK], item_id [FK], in_inventory_id [FK] ,out_delivery_id [FK],out_inventory_id [FK] )


    有什么问题吗?
    zjsxwc
    zjsxwc
    Oct 13, 2018 via Android
    9
    楼上一堆鄙视用外键的是什么鬼,现在都自动生成代码了,外键用不用是代码生产机的活,8102 年了我其实老早就不关心外键了,因为肯定会被程序员毫无察觉的用外键。
    xuanbg
    xuanbg
    Oct 13, 2018
    10
    一个字段对应多表 ID 这种情况无法使用物理外键。解决的方法很简单,要么把这个字段分拆到两个扩展表里面去,要么不使用物理外键。
    Oathbinder
    Oathbinder
    OP
    Oct 13, 2018
    11
    @xuanbg 具体怎么拆分呢
    watzds
    watzds
    Oct 14, 2018 via Android
    12
    @zjsxwc 请问什么工具生成代码的
    zjsxwc
    zjsxwc
    Oct 14, 2018 via Android
    13
    @watzds

    成熟的 orm 框架都有相应的代码生产机
    luozic
    luozic
    Oct 15, 2018
    14
    平行扩展或者数据库迁移就知道乱用外键的坑了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4803 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 08:19 · PVG 16:19 · LAX 00:19 · JFK 03:19
    ♥ Do have faith in what you're doing.