相关疑难解决方法(0)

表中主键的最佳实践是什么?

在设计表时,我养成了一个习惯,就是让一个列是唯一的,并且我制作了主键.这取决于要求以三种方式实现:

  1. 自动递增的标识整数列.
  2. 唯一标识符(GUID)
  3. 可用作行标识符列的短字符(x)或整数(或其他相对较小的数字类型)列

数字3将用于相当小的查找,主要是可能具有唯一静态长度字符串代码的读取表,或者诸如年份或其他数字的数字值.

在大多数情况下,所有其他表将具有自动递增整数或唯一标识符主键.

问题:-)

我最近开始使用没有一致行标识符的数据库,主键目前在各个列上进行聚类.一些例子:

  • 日期时间/字符
  • 日期时间/整数
  • 日期时间/ VARCHAR
  • 炭/ NVARCHAR/nvarchar的

这有一个有效的案例吗?我总是会为这些案例定义一个标识或唯一标识符列.

此外,还有许多表没有主键.这有什么正当理由?

我试图理解为什么桌子的设计原样,对我来说这似乎是一个很大的混乱,但也许有充分的理由.

第三个问题可以帮助我解释答案:在使用多列构成复合主键的情况下,这种方法与代理/人工密钥相比有特定的优势吗?我主要考虑的是性能,维护,管理等方面?

sql database sql-server relational

245
推荐指数
11
解决办法
15万
查看次数

代理与自然/商业密钥

我们再来一次,旧的论点仍然出现......

我们是否更好地将业务密钥作为主键,或者我们是否更愿意在业务键字段上具有唯一约束的代理ID(即SQL Server标识)?

请提供支持您的理论的示例或证明.

database database-design key primary-key

166
推荐指数
13
解决办法
6万
查看次数

你觉得你的主键怎么样?

在我的团队的一个相当生气勃勃的讨论中,我被认为是大多数人喜欢的主键.我们有以下小组 -

  1. Int/BigInt哪个自动增量是足够好的主键.
  2. 应该至少有3列构成主键.
  3. Id,GUID和人类可读行标识符都应该区别对待.

什么是PK的最佳方法?如果你可以证明你的意见,这将是很棒的.上面有没有更好的方法?

编辑:任何人都有一个简单的样本/算法来生成可扩展的行的人类可读标识符?

algorithm ddl database-design primary-key relational-database

85
推荐指数
11
解决办法
2万
查看次数

何时使用自动递增的主键,何时不使用?

我试图找出决定是否添加自动递增整数作为表的主键的"最佳实践".

假设我有一个包含化学元素数据的表格.每个元素的原子序数是唯一的,永远不会改变.因此,不是为每列使用自动递增整数,而是使用原子序数可能更有意义,对吗?

如果我有一张书桌,那也是如此吗?我应该使用ISBN还是主键的自动递增整数?或者包含每个人的SSN的员工表?

sql database-design

55
推荐指数
3
解决办法
3万
查看次数

我应该有一个专用的主键字段吗?

我正在设计一个由Web应用程序使用的小型SQL数据库.

假设一个特定的表有一个Name字段,其中不允许两行具有相同的值.但是,用户可以随时更改"名称"字段.

此表中的主键将用作其他表中的外键.因此,如果将Name字段用作主键,则需要将任何更改传播到其他表.另一方面,唯一性要求将自动处理.

我的直觉是添加一个整数字段作为主键,可以由数据库自动填充.有这个领域有什么意义,还是浪费时间?

database-design primary-key

18
推荐指数
3
解决办法
3972
查看次数

使用项目特定的前缀和自动编号为主键?

今天早上我们开了一个会议,讨论如何将我们的ID存储在我们正在制作的数据库中的某些资产中,这些描述产生了一些热量,所以我决定咨询SO的专家.

我相信我们应该拥有的表格结构(简短版本)如下所示:

例1)

  • AssetId - int(32) - 主键
  • 类型 - 字符串

所以一些示例数据是这样的:

==AssetId======Type===
  12345        "Manhole"
  155415       "Pit"
Run Code Online (Sandbox Code Playgroud)

等等

团队的另一名成员建议这样的事情:

例2)

  • AssetId - 字符串 - 主键
  • 类型 - 字符串

所以一些示例数据是这样的:

==AssetId======Type===
  "MH12345"    "Manhole"
  "P155415"    "Pit"
Run Code Online (Sandbox Code Playgroud)

我们制作该类型的简短版本并将其附加到ID的前面并将其存储在数据库中.我已经看到一些资产数据库这样做,从来没有真正的这种方法.

我从来没有真正喜欢使用字符串作为ID来排序的原因.当你已经拥有资产商店的类型时,我也觉得存储无用的信息只是为了它.

你会采取什么方法?为什么?使用方法1超过2有什么好处?

编辑:是的我将使用AUTO_INCREMENT方法1.

database-design primary-key

12
推荐指数
2
解决办法
3726
查看次数

在表或类似中使用两个主键

我有一张桌子Users.

我有一个自动增加长ID作为主要.现在我需要用户名也是唯一的.什么是最佳做法?

我应该只保留用户名并删除数字ID吗?我应该以某种方式使它们都独一无二吗?您有什么推荐的吗?

也许还应该提一下使用hibernate.

java database postgresql hibernate

2
推荐指数
1
解决办法
133
查看次数