我正在设计一个数据库来存储一些艺术家的信息。这些艺术家可以属于一个或多个组织。从这些组织中,我只想存储他们的名字,我正在考虑与这些组织创建一个表,这些组织只将名称作为主键,没有别的。有一个只有主键字段的表是一个概念错误吗?在这种情况下,我会感谢一些解决该问题的建议。
最佳答案
Is the fact of having a table with just the fieds of the primary key a conceptual error?
不是自己。在完全合法的情况下,所有字段都包含一个 PK。
在这种特殊情况下,组织名称是一个键,但这并不一定意味着它应该是主键——您可以“发明”另一个键更小(通常是整数)并且更容易维护并使它成为主要的,如下所示:
organizarion_id
被称为“代理键”,这样做的一些优点包括:
- 子 FK 会更 slim (因为只有整数会迁移到子 FK,而不是整个字符串)。
- 您可以在不更新
organization_id
的情况下更新organization_name
,因此不会将此更新级联给子级。 - 与更复杂的自然键相比,小整数代理对 ORM 可能更友好。
缺点:
- 可能需要更多的加入。
- 需要多一个索引,每增加一个索引都会带来开销(即使在基于堆的表中,尤其是在 clustered tables 中)。
如您所见,这是一个平衡问题,只有您拥有足够的领域知识来做出正确的决定。
注意:organization_artist
中的字段顺序很重要。如果您需要有效地查询给定组织的艺术家,请使用上面显示的顺序,如果您需要给定艺术家的组织,请使用上面显示的顺序。如果您需要两个方向,您将需要在这两个字段上的另一个复合索引(在 PK 下方的索引旁边),但顺序相反。如果您只能使用一个索引,请考虑对该表进行聚类(如果您的 DBMS 支持)。
关于database - 拥有仅包含主键字段的表是概念错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11266790/