我正在尝试创建一个工作数据库。我有两种不同类型的用户:内部和外部。每种类型都有不同的属性,所以我只为它们创建了两个单独的表。在我的内部表中,我有以下字段:
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
我意识到我可能创建一个单独的表,其中包含用户名和指向内部或外部的外键,但除此之外,我在内部表中添加了一个外键约束,引用{{1另一个内部用户。我叫它supv_id
。当我尝试为我的外部用户表执行相同操作时,我得到了fk_supv_id
。
起初我无法弄清问题是什么,但是当我尝试使用不同的名称时,它起作用(即不是像内部一样调用它ERROR 1005 (HY000)
,我称之为{ {1}})。
所以我的问题是,这是正确的方法是什么?它在两个不同的表中是相同的外键。在这两种情况下,它都指内部用户。没有两个不同的名字有没有办法做到这一点?或者我应该选择名称表的想法,并将fk_supv_id
约束与fk_xtsupv_id
,supv_id
和f_name
一起添加到该表中?
赞赏建议和建议,
谢谢! :)
答案 0 :(得分:4)
有列和外键(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约束。
答案 1 :(得分:3)
FK的名称必须是唯一的。您需要使用两个不同的FK名称。我还建议你应该在关键名称中包含有关链接表的信息,以使其更具描述性。