【发布时间】:2014-04-18 08:19:17
【问题描述】:
我在一个表空间中有几个表,例如 t_a,t_b,t_c。 每个都有一个字段名profile_id,有什么好的方法可以为这些表生成唯一键吗?
【问题讨论】:
标签: database postgresql uniqueidentifier unique-key
我在一个表空间中有几个表,例如 t_a,t_b,t_c。 每个都有一个字段名profile_id,有什么好的方法可以为这些表生成唯一键吗?
【问题讨论】:
标签: database postgresql uniqueidentifier unique-key
大多数想要您描述的内容的人使用uuid 键 - 请参阅ossp-uuid 扩展以了解有用的 uuid 生成功能。
另一种选择是使用单个序列,您可以使用nextval 从中获取密钥。您的所有关键字段都希望是bigint。只需CREATE SEQUENCE business_object_key_seq;。
以上两种情况都不允许您在不使用复杂触发器的情况下强制执行全局唯一性。虽然两者都不会生成重复的键,但只要您的代码没有做任何愚蠢的事情,您就不会得到重复的键,并且您仍然可以在任何给定的表中强制执行唯一性。
有些人使用的另一种方法是使用生成的主键而不是其他任何内容的表,或者可能是某种“object_kind”字段。这可以用作外键引用。看起来这可以让您强制执行唯一性,但实际上它非常无用,因为它不会阻止您在 t_a 和 t_b 中都有 id=42 的行。
【讨论】: