gpt4 book ai didi

postgresql - 如何根据 PostgreSQL 中另一列的值限制列中的值?

转载 作者:行者123 更新时间:2023-11-29 13:48:53 24 4
gpt4 key购买 nike

在向下表插入值时,我想防止 course_codecourse_name 不匹配。

CREATE TABLE course (
course_id INT4 NOT NULL PRIMARY KEY,
course_code CHAR(4) NOT NULL,
course_name VARCHAR(30) NOT NULL
);

我为两者创建了一个枚举(见下文),现在我想将 'C101' 链接到 'Computer Science' 等。

CREATE TYPE e_course_code AS ENUM (
'C101',
'B102',
'E103',
'V104',
'A105',
'E104'
);

CREATE TYPE e_course_name AS ENUM (
'Computer Science',
'Business Information Management',
'Electronics',
'Visual Programming',
'Audio Technology',
'Engineering'
);

是否可以链接两个(或更多)列的指定(枚举)值?插入不匹配的 course_codecourse_name 时会返回错误消息?

最佳答案

实现标题中您所问 的快速可靠工具是使用 MATCH FULL 的外键约束:

CREATE TABLE course (
course_code char(4) PRIMARY KEY
, course_name text NOT NULL
);

CREATE TABLE some_other_table (
some_other_id serial PRIMARY KEY
, course_code char(4)
, course_name text
, -- more columns
, CONSTRAINT course_fk FOREIGN KEY (course_code, course_name)
REFERENCES course(course_code, course_name) MATCH FULL
);

相关:

但是,some_other_table.course_name 将是完全多余的,干净的实现将是规范化形式:

CREATE TABLE some_other_table (
some_other_id serial PRIMARY KEY
, course_code char(4)
, -- more columns
, CONSTRAINT course_fk FOREIGN KEY (course_code) REFERENCES course(course_code)
);

或者您将 course_id 作为 PK 添加到 course 表并将其用作 FK 列。

您可以随时添加 VIEW 另外显示 course_name

关于postgresql - 如何根据 PostgreSQL 中另一列的值限制列中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44085283/

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