gpt4 book ai didi

mysql - 我可以在两个不同的表中使用相同的外键约束吗?

转载 作者:可可西里 更新时间:2023-11-01 07:18:05 24 4
gpt4 key购买 nike

我正在尝试为工作创建一个数据库。我有两种不同类型的用户:内部和外部。每种类型都有不同的属性,所以我只为它们创建了两个单独的表。在我的内部表中,我有以下字段:

f_name VARCHAR(32),
l_name VARCHAR(32),
empl_status_id INT,
admin_grp_id INT,
reliab_status_id INT,
supv_id INT

我的外部表有以下内容:

f_name VARCHAR(32),
l_name VARCHAR(32),
email VARCHAR(32),
phone VARCHAR(20),
org_id INT,
supv_id INT

我意识到我可能会创建一个单独的表,其中包含用户名和指向内部或外部的外键,但除此之外,我在引用 的内部表中添加了一个外键约束supv_id 给另一个内部用户。我将其命名为 fk_supv_id。当我尝试对我的外部用户表执行相同操作时,我得到了 ERROR 1005 (HY000)

起初我无法弄清楚问题出在哪里,但是当我尝试使用不同的名称时,它起作用了(即,我没有像内部一样称它为 fk_supv_id,而是称它为fk_xtsupv_id)。

所以我的问题是,正确的方法是什么?它是两个不同表中的相同外键。在这两种情况下,它都指的是内部用户。有没有办法在没有两个不同名称的情况下做到这一点?或者我应该选择名称表的想法并将 supv_id 约束连同 f_namel_nameuser_type 添加到该表?

感谢您的意见和建议,

谢谢! :)

最佳答案

有列、外键 (FK) 和约束。

无论其他表如何,您都可以在一个表中有一个列名。

FK 是一个引用表和列集以及一个被引用的表和列集。所有名称一起标识一个 FK。这是关于数据库的概念性事物。

FK 约束是一种约束,其名称在数据库中必须是唯一的。它具有并强制执行关联的 FK,即在其声明中描述的 FK。您可以在一个表中有多个 FK 约束来强制执行相同的 FK。

DBMS 为 FK 约束自动设置唯一名称。例如,名称部分加上数字部分,其中约束是具有该名称的表的第 numberth FK 约束。您实际上可以在一个表和多个表中多次使用相同的无名 FK 约束定义文本,每个表用于不同的 FK 约束。 (给定表中的那些强制执行相同的 FK。)

当你想给它们命名时,你应该有一个独特的命名方案。应涉及引用和被引用的表名,并在必要时区分列名。

令人困惑的是,当我们说 FK 约束时我们说 FK。

当您说“这是两个不同表中的相同外键”时,这是误用术语。涉及两个不同的 FK,以及相应的 FK 约束。您的意思可能是“在两个 FK 约束中它是相同的引用列和引用的表和列”或“在两个表声明的 FK 约束声明中重新引用相同的文本”。但是 FK 约束名称必须是唯一的。

当您说“在这两种情况下它都指的是内部用户”时,您是在确认所引用列的类型和/或表对于两个 FK 约束是相同的。但是对于不同的FK,它们是不同的FK约束。

关于mysql - 我可以在两个不同的表中使用相同的外键约束吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24308812/

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