Foreign-Key
您是否需要在子表中包含父表的所有外鍵?
假設你有一張桌子
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) );
我猜想該軟體的設計是為了給定兩個候選鍵,它不應該嘗試“猜測”使用哪一個,因此使用兩者並留給使用者決定刪除哪個。