gpt4 book ai didi

postgresql - 实现 1 :N relation in postgreSQL (object-relational)

转载 作者:行者123 更新时间:2023-11-29 11:54:39 28 4
gpt4 key购买 nike

我正在努力使用 postgreSQL,因为我不知道如何将 A 类型的一个实例链接到 B 类型的一组实例。我将举一个简短的例子:

假设我们要建立一个包含音乐专辑和人物的数据库,每个人都有一个他们最喜欢的专辑列表。我们可以这样定义类型:

CREATE TYPE album_t AS (
Artist VARCHAR(50),
Title VARCHAR(50)
);

CREATE TYPE person_t AS (
FirstName VARCHAR(50),
LastName VARCHAR(50),
FavAlbums album_t ARRAY[5]
);

现在我们要创建这些类型的表:

CREATE TABLE Person of person_t WITH OIDS;
CREATE TABLE Album of album_t WITH OIDS;

现在我想让我的数据库尽可能地成为对象,我不想将相册“对象”嵌套在表 Person 的 FavAlbums 行中,但我想“指向”中的条目表 Album,这样 n 个 Person 记录可以引用同一个 Album 记录,而无需一遍又一遍地复制它。

我阅读了该手册,但它似乎缺少一些重要示例,因为对象关系功能并未经常使用。我也熟悉关系模型,但我想为关系使用额外的表。

最佳答案

为什么要在 postgresql 中创建一个新类型来满足您的需求?为什么不直接使用表格?

有n-n关系:

CREATE TABLE album (
idalbum integer primary key,
Artist VARCHAR(50),
Title VARCHAR(50)
);
CREATE TABLE person (
idperson integer primary key,
FirstName VARCHAR(50),
LastName VARCHAR(50)
);
CREATE TABLE person_album (
person_id integer,
album_id integer,
primary key (person_id, album_id),
FOREIGN KEY (person_id)
REFERENCES person (idperson),
FOREIGN KEY (album_id)
REFERENCES album (idalbum));

或者使用“纯”1-n 关系:

CREATE TABLE person (
idperson integer primary key,
FirstName VARCHAR(50),
LastName VARCHAR(50)
);
CREATE TABLE album (
idalbum integer primary key,
Artist VARCHAR(50),
Title VARCHAR(50),
person_id integer,
FOREIGN KEY (person_id)
REFERENCES person (idperson)
);

希望对你有所帮助。

关于postgresql - 实现 1 :N relation in postgreSQL (object-relational),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6699364/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com