SQL Server多個主鍵與外鍵、複合主鍵與外鍵引用

1、SQL查表語句執行機制

一、邏輯執行順序:從上到下,先有後走

二、不然報錯:"對象名無效"、"外鍵 'FK__學生表__6CD828CA' 引用了無效的表 '宿舍表'"

CREATE TABLE 學生表(
  學號 char(8) primary key,
  樓號 char(2) not null,
  foreign key(樓號) references 宿舍表(樓號),
);
CREATE TABLE 宿舍表(
  樓號 char(2) not null,
  primary key(樓號),
);

三、解決方法:調整建表順序(先有主鍵,纔可引用外鍵)

CREATE TABLE 宿舍表(
  樓號 char(2) not null,
  primary key(樓號),
);
CREATE TABLE 學生表(
  學號 char(8) primary key,
  樓號 char(2) not null,
  foreign key(樓號) references 宿舍表(樓號),
);

 

2、1:1多個單一外鍵引用不一樣表單一主鍵

(1)例題:

Create table 圖書表(
  書號 nchar(6) primary key,
)
Create table 書店表(
  書店編號 nchar(6) primary key,
)
Create table 圖書銷售表(
  書號 nchar(6) not null,
  書店編號 nchar(6) not null,
  銷售日期 smalldatetime not null,
  primary key(書號,書店編號,銷售日期),
  foreign key(書號) references 圖書表(書號),
  foreign key(書店編號) references 書店表(書店編號)
)

(2)刪表:得先刪有引用外鍵約束的表

 

3、n:m複合外鍵引用同一表複合主鍵

(1)1:n不符合語法邏輯,報錯:在被引用表 '宿舍表' 中沒有與外鍵 'FK__學生表__樓號__793DFFAF' 中的引用列列表匹配的主鍵或候選鍵。

CREATE TABLE 宿舍表(
  樓號 char(2) not null,
  宿舍號 char(3) not null,
  primary key(樓號,宿舍號),
);
CREATE TABLE 學生表(
  學號 char(8) primary key,
  樓號 char(2) not null,
  宿舍號 char(3) not null,
  foreign key(樓號) references 宿舍表(樓號),
  foreign key(宿舍號) references 宿舍表(宿舍號),
);

(2)解決方法:同一表複合外鍵對應引用同一表複合主鍵

CREATE TABLE 宿舍表(
  樓號 char(2) not null,
  宿舍號 char(3) not null,
  primary key(樓號,宿舍號),
);
CREATE TABLE 學生表(
  學號 char(8) primary key,
  樓號 char(2) not null,
  宿舍號 char(3) not null,
  foreign key(樓號,宿舍號) references 宿舍表(樓號,宿舍號),
相關文章
相關標籤/搜索