1

使用 SQL Server = MySQL
编程语言 = 无关,但我坚持 Java 和 C#

我有一个关于为 SQL 数据库生成主键的最佳方法的理论问题,然后由我编写的另一个程序使用(假设它不是基于 Web 的。)

我知道主键必须是唯一的,并且我更喜欢主键,当我看到它们时,我也可以立即告诉它们来自哪里,无论是在我使用数据库时在我的 Eclipse 或 Windows 控制台中,还是在关系表中. 出于这个原因,我通常将自己的主键创建为字母数字字符串,除非有特定的唯一值可用,例如 ISBN 或 SS 编号。对于表 Actors,主键可能看起来像 a1,并且在表 Movies m1020 中(假设标题不是唯一的,例如电影“重返女巫山”的不同版本)。

所以我的问题是,如何最好地生成主键(在我的程序中或作为过程的数据库本身)?对于这样的方案,是否最好使用两列,一列具有常量字符串,例如演员的“a”和单个运行计数?(在那种情况下,我需要研究如何引用一个 PK 跨越多个列的表)处理此类任务的最专业方法是什么?

感谢您的时间。

4

4 回答 4

1

最佳实践是让您的数据库引擎将主键生成为auto-incrementNUMBER。字母数字字符串不是一个好方法,即使它看起来对你来说太“抽象”了。然后,您不必担心程序中的主键(Java、C#、其他任何东西);在数据库中插入的每一行,都会自动插入一个唯一的主键

顺便说一句,使用您的解决方案,我不确定您是否能处理同时插入两行的情况......您确定绝对没有,您的主键可以重复吗?

于 2013-10-18T08:04:50.603 回答
1

你的第一行说: -

SQL 服务器 = MySQL

这不是真的。它们不一样。

如何最好地生成主键(在我的程序中或作为过程的数据库本身)?

当您指定具有主键约束的列时,MYSQL 会生成主键。主键是自动生成的,它们会自动递增。

如果您希望您的主键为字母数字(我个人不会推荐),那么您可以尝试这样:-

CREATE TABLE A(
id INT NOT NULL AUTO_INCREMENT,
prefix CHAR(30) NOT NULL,
PRIMARY KEY (id, prefix),

我建议您将主键设置为整数,因为这将帮助您使您的选择更容易和优化。对于 MyIsam 表,您可以创建一个多列索引并将 auto_increment 字段放在辅助列上

于 2013-10-18T08:05:58.690 回答
0

对于 MySQL,有一个最好的方法 - 为您的主键表字段设置 AUTO_INCREMENT 属性。您可以稍后使用 last_insert_id 函数获取生成的 id,或者它是 java 或 c# 模拟。

于 2013-10-18T08:03:23.057 回答
0

我不知道您为什么要使用“字母数字”值 - 为什么不只是一个普通数字?

无论如何,使用您正在使用的任何数据库系统中可用的任何自动增量功能,并坚持下去。不要在数据库之外创建主键 - 您无法知道两个系统何时/如何同时访问数据库,如果两个系统创建相同的 PK 值并尝试插入它,这可能会导致问题。

此外,在我看来,PK 应该只是特定行的 ID(在单列中),仅此而已 - 如果您需要一个字段来指示记录涉及“actor”类型的数据,那么应该是一个单独的字段,与主键无关(为什么会这样?)

于 2013-10-18T08:09:00.963 回答