302*_*aya 4 mysql database foreign-keys foreign-key-relationship
我正在尝试创建一个工作数据库。我有两种不同类型的用户:内部和外部。每种类型都有不同的属性,因此我为它们创建了两个单独的表。在我的内部表中,我具有以下字段:
f_name VARCHAR(32),
l_name VARCHAR(32),
empl_status_id INT,
admin_grp_id INT,
reliab_status_id INT,
supv_id INT
Run Code Online (Sandbox Code Playgroud)
我的外部表具有以下内容:
f_name VARCHAR(32),
l_name VARCHAR(32),
email VARCHAR(32),
phone VARCHAR(20),
org_id INT,
supv_id INT
Run Code Online (Sandbox Code Playgroud)
我意识到我可以创建一个单独的表,其中包含用户名和指向内部或外部的外键,但是除此之外,我还向我的内部表添加了一个外键约束,该约束引用supv_id了另一个内部用户。我叫它fk_supv_id。当我尝试对外部用户表执行相同操作时,我得到了ERROR 1005 (HY000)。
最初我无法弄清楚问题出在哪里,但是当我尝试使用其他名称来解决问题时,它就起作用了(即fk_supv_id,我没有像内部调用那样调用它fk_xtsupv_id)。
所以我的问题是,正确的方法是什么?这是两个不同表中的相同外键。在这两种情况下,它都是指内部用户。没有两个不同的名称,有没有办法做到这一点?或者我应该选择的名称理念的表和添加supv_id约束沿该表f_name,l_name和user_type?
建议和建议,
谢谢!:)
有列,有外键(FK),并且有约束。
您可以在一个表中有一个列名,而与其他表无关。
FK是引用表和列集以及引用表和列集。所有名称共同标识一个FK。这是关于数据库的概念性事情。
FK约束是一种约束,它的名称在数据库中必须是唯一的。它具有并强制执行关联的FK,即其声明中描述的FK。您可以在执行相同FK的表中具有多个FK约束。
DBMS具有FK约束的自动唯一名称。例如,名称部分加上数字部分,其中约束是具有该名称的表的数字FK约束。实际上,您可以在一个表和多个表中多次具有相同的无名FK约束定义文本,每个文本均针对不同的FK约束。(给定表中的那些强制执行相同的FK。)
当您要命名它们时,应该有一个独特的命名方案。应该包含引用和引用的表名,并在必要时区分列名。
令人困惑的是,当我们指的是FK约束时,我们说FK。
当您说“这是两个不同表中的相同外键”时,会误用术语。涉及两个不同的FK,以及相应的FK约束。您的意思是“在两个FK约束中都是相同的引用列以及被引用的表和列”或“在两个表声明的FK约束声明中都是相同的引用文本”。但是FK约束名称必须唯一。
当您说“在两种情况下均指内部用户”时,即表示您确认两个FK约束所引用的列的类型和/或表均相同。但是对于不同的FK,它们是不同的FK约束。