我正在使用 Postgres 数据库设计一个具有相当复杂的表设计的应用程序,但我被困在一个问题上,我希望有人能够提供建议。
我有几个表,每个表都有一个功能 id(或 fid)。不同类型的实体具有不同的属性模式,因此我必须为每种类型创建不同的表。但是,我想确保 fid 在所有实体类型中都是唯一的。
如果我有三种实体类型,Entity1/2/3,由以下 3 个表表示:
Entity1 Entity2 Entity3
fid fid fid
attribute1 attribute2 attribute3
如何确保系统中任何地方不存在重复的 fid?
谢谢!
最佳答案
PostgreSQL(以及 Oracle)使用称为 Sequences 的对象来生成序列值。与 MySQL 和 SQL Server 的序列值生成方法不同,序列不与表绑定(bind)。因此,您可以定义单个序列( documentation link ):
CREATE SEQUENCE your_seq
这将创建一个名为 your_seq
的序列,该序列将从 1 开始,每次检索下一个值时都会增加 1 - 如果要设置最小值和增量值,请参阅文档链接/etc 不同。
要使用它,任何 INSERT 语句都需要包含:
NEXTVAL('your_seq')
...在 INSERT 语句中的位置填充相应的列。 IE:
INSERT INTO entity1
(fid)
VALUES
(NEXTVAL('your_seq'))
并且,为了进一步自动化此操作,您可以将 NEXTVAL('your_seq')
设置为所有使用它的表的默认值。
关于sql - PostgreSQL表设计——如何避免重复使用ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3527519/