代码之家  ›  专栏  ›  技术社区  ›  van

SQL静态数据/查找列表标识符

  •  1
  • van  · 技术社区  · 17 年前

    关于静态数据表的设计。在表中具有静态数据,如图所示:

    • 货币(代码、名称)。行示例:美元,美元
    • 国家(代码、名称)。世界其他地区示例:德国德
    • XXXObjectType(代码、名称等其他属性)

    将另一个(整数)列作为主键以便所有外键引用都使用它有意义吗?

    可能的解决方案:

    1. 使用其他整数作为PK和FK
    2. 使用代码(通常是CHAR(N),其中N很小)作为PK和FK
    3. 仅当小于特定大小时才使用代码。。。多大尺寸?
    4. 另外 _______

    我通常用 INT IDENTITY 列,但通常短代码足以在UI上向用户显示,在这种情况下,查询将少一个联接。

    2 回复  |  直到 17 年前
        1
  •  7
  •   Dave Markle    17 年前

    这里绝对不需要INT标识。使用2位或3位助记符代替。如果你有一个没有小的唯一属性的实体,那么你应该考虑使用一个合成键。但货币代码和国家代码不是这样做的时候。

    我曾经在一个系统中工作过,有人实际上有一张年份表,每年都有一个YearID。事实上,2001年是第三年,2000年是第四年。它使系统中的所有其他内容 更难理解和质疑,这是徒劳的。

        2
  •  3
  •   M.Turrini    17 年前

    如果使用ID INT或CHAR,则在这两种情况下都会保留引用完整性。
    通常 使用VARCHAR是有意义的,因为后者有2字节的开销。不管怎么说,当谈到有500条记录的表时,一个字符(5)在一个INT键上的总开销只有500字节,对于一些表可能有数百万条记录的数据库来说,这是一个非常有趣的值。
    考虑到国家和货币(例如)数量有限(最多几百个),您没有 真实的 使用ID INT代替CHAR(4)的增益;此外,CHAR(4)键对于最终用户来说更容易记住,并且当您必须调试/测试Sql和/或数据时,可以简化您的生活。
    因此,尽管我通常对大多数表使用ID INT键,但在一些情况下,我选择使用由字符组成的PK/FK:国家、语言、货币都属于这些情况。