只有主键字段的表是一个概念错误?

Jav*_*ene 1 database database-design

我正在设计一个存储一些艺术家信息的数据库.这些艺术家可以属于一个或多个组织.从这些组织我只想存储他们的名字,我正在考虑创建一个表格,这些组织只有名称作为主键,没有别的.是否有一个表只有主键的fieds一个概念错误?在这种情况下,我将感谢一些解决这个问题的建议.

Bra*_*vic 5

是否有一个表只有主键的fieds一个概念错误?

不是单独的.存在完全合法的情况,其中所有字段都包含PK.

在这种特殊情况下,组织名称一个关键,但这并不一定意味着它应该是键 - 您可以"发明"另一个更小的键(通常是整数)并且更容易维护并使其成为主键,如下所示:

在此输入图像描述

organizarion_id被称为"代理键",做的一些优点,其中包括:

  • 子FK将变得更苗条(因为只有整数被迁移到子,而不是整个字符串).
  • 您可以更新它organization_name而不更新organization_id,因此无需将此更新级联到子级.
  • ORM的小整数代理可能比更复杂的自然密钥更友好.

缺点:

  • 可能需要更多的JOINing.
  • 需要多一个索引,每个附加索引都会带来开销(即使在基于堆的表中,尤其是在集群表中).

正如您所看到的,这是一个平衡问题,您是唯一一个拥有足够领域知识来做出正确决策的人.

注意:organization_artist事项中的字段顺序.如果您需要有效地查询给定组织的艺术家,请使用上面显示的顺序,如果您需要给定艺术家的组织,请将其反转.如果你需要两个方向,你需要在这两个字段上的另一个复合索引(在PK下面的索引旁边),但顺序相反.如果只能使用一个索引,请考虑对此表进行集群(如果您的DBMS支持它).