gpt4 book ai didi

sql - 设置不同数据类型的外键

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

如果我创建两个表并且我想将一个列设置为另一个表列的外键为什么我允许设置外键列数据类型?

它只是没有任何意义,还是我遗漏了什么?是否存在外键列故意具有不同数据类型的情况?

更深入地了解我的担忧,我尝试使用 pgadmin 构建一些简单的 Postgres 数据库。我用主键 serial 数据类型制作了第一个表。然后我尝试制作外键但是什么数据类型?我在某处看到 serialbigint unsigned。但是这个选项在 pgadmin 中甚至不存在。当然我可以使用 sql,但为什么我要使用 gui?所以我改用 Navicat,同样的问题。我觉得每一个选择都在我的数据库设计中犯了另一个错误......

编辑:

也许我问错了问题。我被允许做构建结构:

CREATE TABLE user
(
id bigint NOT NULL,
CONSTRAINT user_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);

CREATE TABLE book
(
user integer,
CONSTRAINT dependent_user_fkey FOREIGN KEY (user)
REFERENCES user (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);

我向表用户插入一些数据:

INSERT INTO user(id)
VALUES (5000000000);

但是我不能投下面的插入:

INSERT INTO book(user)
VALUES (5000000000);

带有 ERROR: integer out of range 这是可以理解的,但是明显的设计错误。

我的问题是:为什么当我们设置CONSTRAINT 时,数据类型没有被验证。如果我错了,答案应该包含使用不同数据类型很有用的场景。

最佳答案

实际上它确实有意义,原因如下:

在表中,您实际上可以将任何列设置为其主键。因此它可以是整数、 double 、字符串等。尽管如今,我们主要使用整数或最近使用字符串作为表中的主键。

由于外键指向另一个表的主键,因此需要指定外键的数据类型。而且它显然需要是相同的数据类型。

编辑:

正如我们所见,SQL 实现在这种情况下很松散:它们确实允许兼容类型(INT 和 BIG INT、Float 或 DECIMAL 和 DOUBLE)但风险自负。正如我们在下面的示例中看到的那样。

但是,SQL 规范确实指定两种数据类型必须相同。如果数据类型是字符,它们必须具有相同的长度,否则,如果它是整数,它们必须具有相同的大小并且必须两者有符号的或都是无符号的.

自己看over here ,2003 年出版的 MySQL 书籍中的一章。

希望这能回答您的问题。

关于sql - 设置不同数据类型的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32267778/

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