如果有表ORGANIZATION,我可以使用license_number作为主键吗?我知道主键应该是不可变的,但我不知道许可证是否如此。此外,两个组织可能有一个许可证吗?如果不是,我应该使用哪个主键?
答案 0 :(得分:2)
如果您不是 100%肯定license_number
是唯一的,请不要将其用作主键。
primary key
应该是一个唯一值,可用于引用表中的特定行。为安全起见,为什么不使用auto increment
字段?
我会做这样的事情:
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 )
)
如果one
组织可以many
license numbers
,则创建另一个名为org_license_numbers
的表,并将organization_id
跟踪为foreign key
organization
表和相应的license number
答案 1 :(得分:2)
简短回答:不要将 alien 数字用作PK:
答案 2 :(得分:1)
那么,关于公司许可证号码的独特性,您需要咨询您所在国家/地区的律师。
无论如何,您始终可以创建新的,不相关的ID列(INT IDENTITY),并将其用作主键和聚簇索引键。
另请注意,在SQL Server中,设计器默认情况下使主键列也成为聚簇索引。它并不总是最好的行为。例如,如果您选择许可证号作为主键 - 它可能不是顺序的,这意味着数据库引擎必须在现有行之间插入新行,这将导致页面拆分和群集索引的高度碎片,这可能会影响性能严重(特别是如果桌子很大)。因此,请确保即使您选择将许可证编号作为主键,也请选择更好的聚簇索引键。例如:在表中创建行的日期时间。
祝你好运。