Mysql

無法添加外鍵約束

  • December 13, 2017

據我所知,它應該可以工作,我經歷了其他類似的問題,但它似乎是導致相同錯誤的不同事物。

CREATE TABLE Job
(
   JobNumber INT NOT NULL,
   JobName CHAR(30) NOT NULL,
   JobDescription CHAR(60) NOT NULL,
   Title Char(30) NOT NULL,
   PersonID INT NOT NULL,
  CONSTRAINT PK_JobNum PRIMARY KEY (JobNumber)
);

CREATE TABLE Employee
(
   PersonID INT NOT NULL,
   FirstName CHAR(30) NOT NULL,
   LastName CHAR(30) NOT NULL,
   CONSTRAINT Pk_PersonID PRIMARY KEY(PersonID),
   CONSTRAINT FK_Job_2_Employee FOREIGN KEY(PersonID) REFERENCES Job(PersonID)
);

CREATE TABLE Game
(
   GameNumber INT NOT NULL,
   Title CHAR(30) NOT NULL,
   System CHAR(30) NOT NULL,
   CONSTRAINT PK_GameNumber PRIMARY KEY(GameNumber),
   CONSTRAINT FK_Job_2_Game FOREIGN KEY(Title) REFERENCES Job(Title)
);

當我嘗試初始化第二個表時出現錯誤。(它可能會出現在第三個。)

  • 多人可以做同一份工作,一個人可以做多份工作。
  • theJobNumber和 theJobName不是一回事。每個JobNumber人只有一個員工,而一個人JobNumber只有一個JobName
  • 和一個人的JobNumber工作不是一回事。
  • 工作編號和工作種類不是一回事。例如,職位編號 1235 和 1435 都可以擁有“關卡設計師”職位。

看來您將外鍵放在錯誤的表上。PersonID表上的列Jobs應參考表PersonID上的Employee

如果您將人員分配給工作,那麼您的原始外鍵應該是 on JobId。這將需要添加JobIdEmployees表中並PersonId從表中刪除Jobs

如果Employees可以有多個Jobs並且Jobs可以有多個Employee,那麼您將需要一個連接表。它將具有表JobsEmployees表的外鍵。連接表的主鍵將包括PersonIdJobId

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