Foreign-Key

您是否需要在子表中包含父表的所有外鍵?

  • January 27, 2012

假設你有一張桌子

my_table
-----------
id
name
foreign_id

您正在創建另一個將引用 my_table 的表。我認為這就足夠了:

other_table
-----------
id
name
my_table_id

但是,在 MySQL 工作台上創建圖表時,如果我創建一個關係,無論是辨識還是非辨識,1 對 1,或 1 對多,我都會得到這個表:

other_table
-----------
id
name
my_table_id
foreign_id

如您所見,my_table 的 id 和 my_table 的 foreign_key 都被添加到新表中。這真的有必要嗎?我會說這other_table.foreign_id沒有必要。

當我在 schemabank.com 上工作時,我第一次注意到這一點(現在似乎已經消失了,真可惜)。現在我在 MySQL 工作台上也注意到了。

我想我跟著,但這裡有一個使用更有意義的名字的例子:

鑑於這兩個表:

CREATE TABLE Persons 
(
person_ID INTEGER NOT NULL UNIQUE
);

CREATE TABLE Employees 
(
employee_ID INTEGER NOT NULL UNIQUE, 
person_ID INTEGER NOT NULL UNIQUE, 
FOREIGN KEY (person_ID)
   REFERENCES Persons (person_ID), 
);

我想你是說你會添加一個這樣的引用表:

CREATE TABLE HourlyPaidEmployees
(
employee_ID INTEGER NOT NULL UNIQUE, 
FOREIGN KEY (employee_ID)
   REFERENCES Employees (employee_ID) 
);

我傾向於同意,因為我是一個可以理解給定兩個候選鍵的人,employee_ID因為表名HourlyPaidEmployees強烈表明它與員工有關。

但是,您的軟體似乎會生成以下內容:

CREATE TABLE HourlyPaidEmployees
(
employee_ID INTEGER NOT NULL UNIQUE, 
FOREIGN KEY (employee_ID)
   REFERENCES Employees (employee_ID),
person_ID INTEGER NOT NULL UNIQUE, 
FOREIGN KEY (person_ID)
   REFERENCES Employees (person_ID) 
);

我猜想該軟體的設計是為了給定兩個候選鍵,它不應該嘗試“猜測”使用哪一個,因此使用兩者並留給使用者決定刪除哪個。

引用自:https://dba.stackexchange.com/questions/11754