我们正在尝试为我们正在创建的资产系统提出一个编号系统,在办公室对此话题进行了一些激烈的讨论,所以我决定询问 SO 的专家。
考虑下面的数据库设计会是更好的选择。
示例 1:使用自动代理键。
================= ==================
Road_Number(PK) Segment_Number(PK)
================= ==================
1 1
示例 2:使用程序生成的 PK
================= ==================
Road_Number(PK) Segment_Number(PK)
================= ==================
"RD00000001WCK" "00000001.1"
(这00000001.1
意味着它是道路的第一段。每次添加新路段时都会增加,例如00000001.2
)
示例 3:两者都使用(添加新列)
======================= ==========================
ID(PK) Road_Number(UK) ID(PK) Segment_Number(UK)
======================= ==========================
1 "RD00000001WCK" 1 "00000001.1"
只是一点背景信息,我们将在报告和其他文档中使用Road Number
and Segment Number
,因此它们必须是唯一的。
我一直喜欢保持简单,所以我更喜欢示例 1,但我一直在读到你不应该在报告/文档中公开你的主键。所以现在我更多地按照示例 3 的思路进行思考。
我也倾向于示例 3,因为如果我们决定更改资产编号的生成方式,则不必对主键进行级联更新。
你认为我们应该怎么做?
谢谢。
编辑:感谢大家的精彩回答,对我帮助很大。