所以我现在正在创建一个数据库,我已经成功地创建了我的表、列、主键,确保数据类型是正确的。
但是,现在,当我尝试执行数据库创建的下一步(即定义外键约束)时,我无法执行该操作,并且会出现如下错误:“外键'fk\u tweedledeer\u shiploster'的引用列列表中的列数与引用表'ship\u roster'中的主键的列数不匹配。”
这是我所有的table。这个错误现在出现在“tweedledeer”表和“ship\u lotster”表之间,我试图在其中创建一个通过“tweedle\u no”列描述关系的外键
USE MASTER
GO
IF EXISTS ( SELECT *
FROM MASTER ..sysdatabases
WHERE NAME = N'SpaceshipRaiders')
DROP DATABASE SpaceshipRaiders;
GO
CREATE DATABASE SpaceshipRaiders;
GO
USE SpaceshipRaiders;
CREATE TABLE TWEEDLEDEER(
Tweedle_No INT,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
Birth_Date DATETIME NOT NULL,
Dead_Date DATETIME NOT NULL,
Gender NVARCHAR(50) NOT NULL,
Position NVARCHAR(50) NOT NULL,
Father INT NOT NULL,
Mother INT NOT NULL
CONSTRAINT tweedledeer_pk PRIMARY KEY (Tweedle_No)
CONSTRAINT FK_TWEEDLEDEER_TWEEDLEDEER1 FOREIGN KEY (Father) REFERENCES TWEEDLEDEER,
CONSTRAINT FK_TWEEDLEDEER_TWEEDLEDEER FOREIGN KEY (Mother) REFERENCES TWEEDLEDEER,
)
GO
CREATE TABLE POSITION(
PositionName NVARCHAR(50),
Description TEXT NOT NULL
CONSTRAINT position_pk PRIMARY KEY (PositionName)
)
GO
CREATE TABLE SHIP_ROSTER(
ShipRego_No INT,
Tweedle_No INT NOT NULL,
CommencementDate DATETIME NOT NULL,
Termination_Date DATETIME NOT NULL,
Medal NVARCHAR(50) NOT NULL
CONSTRAINT ship_roster_pk PRIMARY KEY (ShipRego_No, Tweedle_No, CommencementDate)
)
GO
CREATE TABLE SPACESHIP(
ShipRego_No INT NOT NULL,
ShipName NVARCHAR(50) NOT NULL,
LightYearsTravelled INT NOT NULL,
MaxWarpSpeed INT NOT NULL
CONSTRAINT spaceship_fk PRIMARY KEY (ShipRego_No)
)
GO
CREATE TABLE MEDAL(
Medal NVARCHAR(50) NOT NULL,
Value MONEY NOT NULL
CONSTRAINT medal_pk PRIMARY KEY (Medal)
)
GO
CREATE TABLE RAID(
Raid_No INT NOT NULL,
ShipRego_No INT NOT NULL,
Planet_No INT NOT NULL,
Date DATETIME NOT NULL,
StartTime DATETIME NOT NULL,
EndTime DATETIME NOT NULL,
OppositionLevel NVARCHAR(50) NOT NULL
CONSTRAINT raid_pk PRIMARY KEY (Raid_No)
)
GO
CREATE TABLE PRISONER(
Prisoner_Id INT NOT NULL,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
YearOfBirth INT NOT NULL,
YearOfDeath INT NOT NULL,
Raid_No INT NOT NULL,
RansomPaid MONEY NOT NULL,
Colour NVARCHAR(50) NOT NULL
CONSTRAINT prisoner_pk PRIMARY KEY (Prisoner_Id)
)
GO
CREATE TABLE PLANET(
Planet_No INT,
Name NVARCHAR(50) NOT NULL,
DayLength INT NOT NULL,
Atmospher NVARCHAR(50) NOT NULL,
Technology NVARCHAR(50) NOT NULL,
Star_No INT NOT NULL
CONSTRAINT planet_pk PRIMARY KEY (Planet_No)
)
GO
CREATE TABLE STAR(
Star_No INT,
Name NVARCHAR(50) NOT NULL,
SpectralType NVARCHAR(50) NOT NULL,
Position NVARCHAR(50) NOT NULL
CONSTRAINT star_pk PRIMARY KEY (Star_No)
)
GO
我还试图用这个方法修改表
alter table TWEEDLEDEER
add constraint FK_TWEEDLEDEER_SHIPROSTER
FOREIGN KEY(Tweedle_No) REFERENCES SHIP_ROSTER
1条答案
按热度按时间46scxncf1#
表
SHIP_ROSTER
有3列作为主键,在引用中使用它时,您只使用一列,而外键中需要3列。所以总的想法是,在表中
SHIP_ROSTER
,列Tweedle_No
单独不是唯一的,您不能引用任何列中没有唯一值。如果数据结构允许,那么可以对
SHIP_ROSTER
table的Tweedle_No
列,则外部约束将起作用