SQL-主键选择

SQL-主键选择,sql,database-design,primary-key,Sql,Database Design,Primary Key,如果有表组织,我可以使用许可证号码作为主键吗?我知道主键应该是不可变的,但我不知道许可证是否是不可变的。此外,两个组织是否可能拥有一个许可证?如果没有,我应该使用哪个主键?如果您不是100%肯定许可证号是唯一的,请不要将其用作主键 主键应该是唯一的值,可用于引用表中的特定行。为了安全起见,为什么不使用自动递增字段 我会这样做: CREATE TABLE organization ( organization_id int NOT NULL AUTO_INCREMENT, license_numb

如果有表组织,我可以使用许可证号码作为主键吗?我知道主键应该是不可变的,但我不知道许可证是否是不可变的。此外,两个组织是否可能拥有一个许可证?如果没有,我应该使用哪个主键?

如果您不是100%肯定许可证号是唯一的,请不要将其用作主键

主键应该是唯一的值,可用于引用表中的特定行。为了安全起见,为什么不使用自动递增字段

我会这样做:

CREATE TABLE organization
(
organization_id int NOT NULL AUTO_INCREMENT,
license_number varchar(100) -- Set accordingly
another_attribute varchar(255) NOT NULL,
PRIMARY KEY (organization_id )
)
如果一个组织可以有多个许可证号,则创建另一个名为“组织许可证号”的表,并将组织id作为组织表的外键和相应的许可证号进行跟踪

如果您不是100%肯定该许可证号是唯一的,则不要将其用作主键

主键应该是唯一的值,可用于引用表中的特定行。为了安全起见,为什么不使用自动递增字段

我会这样做:

CREATE TABLE organization
(
organization_id int NOT NULL AUTO_INCREMENT,
license_number varchar(100) -- Set accordingly
another_attribute varchar(255) NOT NULL,
PRIMARY KEY (organization_id )
)

如果一个组织可以有多个许可证号码,那么创建另一个名为org_license_number的表,并将组织id作为组织表的外键和相应的许可证号码进行跟踪。好吧,关于公司许可证号码的唯一性,您必须向您所在国家的律师询问

无论如何,您始终可以创建新的、不相关的ID列INT-IDENTITY,并将其用作主键和聚集索引键

还要注意,在SQL Server中,设计器默认情况下使主键列也成为聚集索引。这并不总是最好的行为。例如,如果您选择许可证号作为主键—它可能不是连续的,这意味着数据库引擎必须在现有行之间插入新行,这将导致页面拆分和群集索引的高度碎片化,这可能会严重影响性能,特别是当表较大时。因此,请确保即使您选择将许可证号作为主键,也要选择更好的聚集索引键。例如:在表中创建行的日期和时间


祝你好运。

好吧,关于公司执照号码的独特性,你必须向你所在国家的律师询问

无论如何,您始终可以创建新的、不相关的ID列INT-IDENTITY,并将其用作主键和聚集索引键

还要注意,在SQL Server中,设计器默认情况下使主键列也成为聚集索引。这并不总是最好的行为。例如,如果您选择许可证号作为主键—它可能不是连续的,这意味着数据库引擎必须在现有行之间插入新行,这将导致页面拆分和群集索引的高度碎片化,这可能会严重影响性能,特别是当表较大时。因此,请确保即使您选择将许可证号作为主键,也要选择更好的聚集索引键。例如:在表中创建行的日期和时间

祝你好运。

简短回答:不要使用外星数字作为主键:

编号不在您的控制之下,它可能会改变。如果密钥空间用完,可能会添加前缀,甚至可能会对它们进行残酷的重新编号 因为它不在您的控制之下,所以不能保证唯一性。这也可能随着时间的推移而改变。 例如,可以增加一个额外的关键因素,因为同样的公司也可能存在于其他国家 也许你还不知道组织的id,但你仍然需要创造一个记录 PK可以在其他表中用作此表的外键,对数字的更改也会导致更新。 简短回答:不要使用外来号码作为主键:

编号不在您的控制之下,它可能会改变。如果密钥空间用完,可能会添加前缀,甚至可能会对它们进行残酷的重新编号 因为它不在您的控制之下,所以不能保证唯一性。这也可能随着时间的推移而改变。 例如,可以增加一个额外的关键因素,因为同样的公司也可能存在于其他国家 也许你还不知道组织的id,但你仍然需要创造一个记录 PK可以在其他表中用作此表的外键,对数字的更改也会导致更新。