【问题标题】:Database global unique business key in postgreSQLpostgreSQL 中的数据库全局唯一业务密钥
【发布时间】:2014-04-18 08:19:17
【问题描述】:

我在一个表空间中有几个表,例如 t_a,t_b,t_c。 每个都有一个字段名profile_id,有什么好的方法可以为这些表生成唯一键吗?

【问题讨论】:

    标签: database postgresql uniqueidentifier unique-key


    【解决方案1】:

    大多数想要您描述的内容的人使用uuid 键 - 请参阅ossp-uuid 扩展以了解有用的 uuid 生成功能。

    另一种选择是使用单个序列,您可以使用nextval 从中获取密钥。您的所有关键字段都希望是bigint。只需CREATE SEQUENCE business_object_key_seq;

    以上两种情况都不允许您在不使用复杂触发器的情况下强制执行全局唯一性。虽然两者都不会生成重复的键,但只要您的代码没有做任何愚蠢的事情,您就不会得到重复的键,并且您仍然可以在任何给定的表中强制执行唯一性。

    有些人使用的另一种方法是使用生成的主键而不是其他任何内容的表,或者可能是某种“object_kind”字段。这可以用作外键引用。看起来这可以让您强制执行唯一性,但实际上它非常无用,因为它不会阻止您在 t_at_b 中都有 id=42 的行。

    【讨论】:

    • 如果多张表使用一个序列,会不会影响数据库的性能?
    • 这完全没有区别。序列不涉及锁定,也不存在争用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2016-12-11
    • 2014-11-15
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    相关资源
    最近更新 更多