首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgresql尝试实现一对多

Postgresql尝试实现一对多
EN

Stack Overflow用户
提问于 2020-04-30 23:03:21
回答 1查看 26关注 0票数 0

这是我第一次使用Sql的实践经验,我正在尝试构建一对多关系,以下是SQL代码:

代码语言:javascript
复制
create table car (
    id SERIAL PRIMARY KEY,
    make VARCHAR(100) NOT NULL,
    model VARCHAR(100) NOT NULL,
    price NUMERIC(19, 2) NOT NULL
);

create table person (
    id BIGSERIAL NOT NULL PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    gender VARCHAR(7) NOT NULL,
    email VARCHAR(100),
    date_of_birth DATE NOT NULL,
    country_of_birth VARCHAR(50) NOT NULL,
    cars_owning INT[] REFERENCES car(id)
);

我得到了这个错误:

代码语言:javascript
复制
Key columns "cars_owning" and "id" are of incompatible types: integer[] and integer.

这是一个模型,一个人可以有很多辆车,但每辆车只有一个车主

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-30 23:31:25

通常(作为一个好的一般经验法则),many指的是one。而不是你尝试过的另一种方式。

因此,将模式更改为:

代码语言:javascript
复制
create table car (
    id SERIAL PRIMARY KEY,
    make VARCHAR(100) NOT NULL,
    model VARCHAR(100) NOT NULL,
    price NUMERIC(19, 2) NOT NULL, 
    owner_id BIGINT FOREIGN KEY REFERENCES person(id)
);

create table person (
    id BIGSERIAL NOT NULL PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    gender VARCHAR(7) NOT NULL,
    email VARCHAR(100),
    date_of_birth DATE NOT NULL,
    country_of_birth VARCHAR(50) NOT NULL
);

如果需要获取某个人拥有的汽车的列表,请使用以下select语句

代码语言:javascript
复制
SELECT person.id, ARRAY_AGG(car.id) owns_car_ids
FROM person
LEFT JOIN car ON person.id = car.owner_id
GROUP BY 1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61526550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档