数据库设计时,主表中有唯一业务编码字段,关联表还需要设计外键吗

2023-12-11 09:32:00 +08:00
 maitiantuzi

举个例子, 主表 - 物料表 material: id: 主键 ID code: 物料唯一编码 name: 物料名称

物料入库记录表: stock_in: id: 主键 ID material_id: 外键 - 物料 ID (这里需要吗?) mateiral_code: 物料唯一编码 in_date: 入库时间

3793 次点击
所在节点    数据库
32 条回复
tietou
2023-12-11 16:31:38 +08:00
一般是逻辑外键吧
go522000
2023-12-11 16:39:45 +08:00
加上去呗,占用不了多少空间,而且又不影响性能。
i8086
2023-12-11 16:47:34 +08:00
不考虑物理外键还是逻辑外键。物料 ID 是数据库表主键,性能是第一的。
SilenceLL
2023-12-11 18:09:10 +08:00
现在很少有用外键的,性能受限
forschers
2023-12-11 18:15:36 +08:00
好像没有咋用外键
lovelylain
2023-12-11 18:32:35 +08:00
不用外键,而且你这个场景,一般给物料表的物料唯一编码加上唯一索引,其他表也直接用这个编码而不是引用物料表的主键 ID 。
kkwa56188
2023-12-11 20:23:39 +08:00
外键是在数据库层面保证数据的完整准确, 按照数据库的设计规范来说 最好能加,
不加的话, 实际业务 要是能承受 出问题时候的情况, 也可以.

我举三个例子, 按照数据出错的严重程度从轻到重 :
1. 在商品评价表里 出现有一条评分来自未知用户, 不存在于用户主表里
2. 在入库表里 发现 有一个 未知的物料, 不存在于物料主表里.
3. 在 支出费用表里出现一张未知的发票, 不存在于发票主表里
pheyx
2023-12-11 21:22:23 +08:00
@adoal 你个干图书馆的破 it 懂个屁
akira
2023-12-12 00:11:22 +08:00
有 mateiral_code 做唯一索引就够了,另外你的 id 大概率是 自增 id ,不建议参与业务
ChadGPT
2023-12-12 08:54:32 +08:00
自增 id 如果参与业务,未来不同类型数据库迁移的时候可能会有麻烦
dyv9
2024-03-21 12:14:35 +08:00
@jucelin 同一个型号的零件也有多个供应商呢。所以眼看到的编号不一定能用作唯一键。
dyv9
2024-03-21 12:18:00 +08:00
@JYii 麻烦是好事,正好阻止了一步破坏所有数据的能力,构造数据和修改数据都要理解数据否则操作不下去。我见过给数据打补丁的人不完全理解设计,直接把一批数据改一样的了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/999254

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX