Sql 只有一列的表应该有主键吗?

Sql 只有一列的表应该有主键吗?,sql,Sql,例如,我有一个名为programs的表和另一个名为format的表。format表包含一个名为format的列,该列有三个可能的值:zip、rar和exe。格式表是否应该有主键?如果值是唯一的,则可能不是。但是,如果这些值没有唯一的索引,则可能会有重复项,这将使识别单行变得困难。此外,使用具有已知固定长度(如整数ID)的PK将有助于提高性能并降低索引碎片。另外,如果您需要加入此表,最好使用外键(在某些RDBMS中需要PK)来引用格式ID而不是值。如果您有一个名为Programs的表和一个名为fo

例如,我有一个名为
programs
的表和另一个名为
format
的表。
format
表包含一个名为format的列,该列有三个可能的值:zip、rar和exe。格式表是否应该有主键?

如果值是唯一的,则可能不是。但是,如果这些值没有唯一的索引,则可能会有重复项,这将使识别单行变得困难。此外,使用具有已知固定长度(如整数ID)的PK将有助于提高性能并降低索引碎片。另外,如果您需要加入此表,最好使用外键(在某些RDBMS中需要PK)来引用格式ID而不是值。

如果您有一个名为
Programs
的表和一个名为
format
的表以及一组值,为什么不在
程序
表中设置一个
FormatId
列,并在
格式
表中使用一个(目前有三个)外键值


请参阅这些关于规范化的注释:(我相信您知道这一点,但可能其他阅读此问题的人可能不知道)。

在大多数情况下,只有一列的表将具有唯一的值,因为重复值,在单个列中也没有意义

所以,在您的情况下,格式不会重复(我就是这么认为的),所以制作主键没有害处,但是

1) 它对该字段强制建立索引(您想要吗?)


2) 将来,如果您计划将其链接到另一个表,请确保将其用作主键,并且不要为主键引入任何类似format_id的内容。如果您这样做,那么现在请不要将其作为主键。

想想如果您的表包含以下内容会发生什么:

zip
rar
exe
exe

如果您认为没有问题,那么您的表就不需要PK。

我看不出两个exe有问题,但是您是否看到有两个exe的值?对于另一个名为“应用程序”的表,使用外键进行格式化。我是否应该使其唯一?我将把它输入另一张桌子