考虑下面的数据库设计,哪种选项更好。
示例1:使用自动代理键。
================= ==================
Road_Number(PK) Segment_Number(PK)
================= ==================
1 1
示例2:使用程序生成的主键
================= ==================
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”和“Segment Number”,因此它们必须是唯一的。
我一直喜欢保持简单,所以我更喜欢示例1,但我已经读到过不应该在报告/文档中公开主键。所以现在我更倾向于示例3。
我也倾向于示例3,因为如果我们决定更改资产编号生成方式,就不必对主键进行级联更新。
你认为我们应该怎么做?
谢谢。
编辑:感谢大家的回答,对我帮助很大。