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
我想使用 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