gpt4 book ai didi

database - 选择最好的主键+编号系统

转载 作者:太空狗 更新时间:2023-10-30 01:39:44 25 4
gpt4 key购买 nike

我们正在尝试为我们正在创建的 Assets 系统提出一个编号系统,办公室里就这个话题进行了一些激烈的讨论,所以我决定请教 SO 的专家。

考虑下面的数据库设计,什么是更好的选择。

alt text

示例 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 NumberSegment Number在报告和其他文档中,因此它们必须唯一

我一直喜欢保持简单,所以我更喜欢示例 1,但我一直在读到您不应该在报告/文档中公开您的主键。所以现在我更多地按照示例 3 的思路进行思考。

我也倾向于示例 3,因为如果我们决定更改 Assets 编号的生成方式,则无需对主键进行级联更新。

你认为我们应该怎么做?

谢谢。

编辑:感谢大家的精彩回答,对我帮助很大。

最佳答案

这实际上是关于代理(也称为技术或合成)与自然主键的讨论,这个主题已被广泛讨论。我在 Database Development Mistakes Made by AppDevelopers 中对此进行了介绍.

Natural keys are keys based on externally meaningful data that is (ostensibly) unique. Common examples are product codes, two-letter state codes (US), social security numbers and so on. Surrogate or technical primary keys are those that have absolutely no meaning outside the system. They are invented purely for identifying the entity and are typically auto-incrementing fields (SQL Server, MySQL, others) or sequences (most notably Oracle).

In my opinion you should always use surrogate keys. This issue has come up in these questions:

自动编号字段是必经之路。如果您的 key 在您的数据库之外具有意义(例如 Assets 编号),那么这些 key 很可能会发生变化并且更改 key 是有问题的。只需对相关表中的这些内容使用索引即可。

关于database - 选择最好的主键+编号系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/707657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com