PostgreSQL - CREATE TABLE - 在复合类型内的属性中应用像 PRIMARY KEY 这样的约束

PostgreSQL - CREATE TABLE - Apply constraints like PRIMARY KEY in attributes that are inside composite types

我想使用 PostgreSQL 实现对象关系数据库。我不想使用 ORACLE。 我可以创建复合类型,然后在 table 中使用它,在其属性之一中添加主键限制吗? 下面我举个例子:

CREATE TYPE teamObj AS (
    idnumeric,
    name character varying,
    city character varying,
    estadiumName character varying,
    jugadores playerObj[]
);

CREATE TABLE teamTable (
    equipo equipoobj,
    PRIMARY KEY (equipo.id)
);

PRIMARY KEY (equipo.id)行报错,我看了很多这方面的文档,也没找到解决方案,也许 PostgreSQL 还没有实现,或者永远不会实现,或者我不明白 PostgreSQL 是如何运行的...

有人有解决办法吗?

谢谢。

不,你不能那样做,我建议你不要那样创建table。

您的 table 定义应该与您的类型定义非常相似。不需要中间类型定义。

原因:

  • 这不会使您的架构更具可读性

  • 违反了关系数据库的第一范式

  • 与简单的 table 定义

  • 不匹配的面向对象设计

作为一种安慰,PostgreSQL 会在你定义一个 table 时隐式定义一个同名的复合类型,所以你可以做类似

的事情
CAST(ROW(12, 'Raiders', 'Wolfschoaßing', 'Dorfwiesn', NULL) AS team)

CREATE FUNCTION getteam(id) RETURNS team