【问题标题】:Difference between a denormalized PK and a compound PK in a key-value lookup situation?在键值查找情况下,非规范化 PK 和复合 PK 之间的区别?
【发布时间】:2023-03-09 00:40:02
【问题描述】:

我遇到的情况是多个站点的 URL 别名查找表。每个站点都被认为是它自己的命名空间,因此只要它们位于不同的站点中,重复的别名就可以了。

我的问题是在存储这些信息时,PostgreSQL 中存储这样的数据是否存在性能差异:

____________________________________
|Alias(PK)      | Page_Object(FK)  |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|namespace.alias|actual page       |

对比:

_________________________________________
|Namespace(CK)|Alias(CK)|Page_Object(FK)|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|namespace    |alias    |actual page    |

【问题讨论】:

    标签: sql postgresql database-schema


    【解决方案1】:

    第一个错了吗?

    这不是性能问题,而是正确性问题。

    如果别名仅在给定的命名空间内是唯一的,那么您需要一个复合唯一索引。如果您添加代理主键,然后创建 UNIQUE(namespace, alias) 约束,或者您只有 PRIMARY KEY(namespace, alias) 但您需要这两个中的一个,这取决于您。许多愚蠢的 ORM 坚持使用单列键,所以如果你正在使用像 Rails 这样的东西,如果你屈服于它的要求,创建一个代理主键,然后对两者进行唯一约束,你将面临更少的痛苦真正的钥匙。

    在性能方面,无论如何都没有太大区别。索引可能会大一点,但不会大很多,这就是真正的变化。

    【讨论】:

    • 这基本上是我遇到的,带有复合键的第二个选项实际上让我无论如何都可以完成更多有用的工作,例如选择特定的命名空间。谢谢!
    猜你喜欢
    • 2010-12-24
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    相关资源
    最近更新 更多