引用的 table 中没有与外键中的列列表匹配的主键或候选键
No Primary or candidate keys in the referenced table that match column list in foreign key
我正在尝试创建一些基本的 SQL 表,但是我不断收到以下错误:
There are no primary or candidate keys in the referenced table 'CART' that match the referencing column list in the foreign key 'FK__ORDERS__CART_ID__2B3F6F97'
这是我当前使用的代码。
create table USERS
(
User_ID int NOT NULL primary key,
Address varchar(30) NOT NULL,
Email varchar(30) NOT NULL,
Password varchar(30) NOT NULL,
Phone varchar(30) NOT NULL,
F_Name varchar(30) NOT NULL,
L_Name varchar(30) NOT NULL,
Date_of_Birth varchar(30) NOT NULL
)
create table PAYMENT
(
User_ID int NOT NULL primary key,
Credit_Card varchar(30) NOT NULL,
Debit_Card varchar(30) NOT NULL,
Google_Pay varchar(30) NOT NULL,
Apple_Pay varchar(30) NOT NULL,
Paypal varchar(30) NOT NULL,
foreign key (User_ID)
references USERS(User_ID)
)
create table CART
(
User_ID int NOT NULL,
Cart_ID int NOT NULL,
Total_Price float NOT NULL,
primary key (Cart_ID, User_ID),
foreign key(User_ID)
references USERS(User_ID)
)
create table ORDERS
(
Order_ID int NOT NULL primary key,
Total_Price float NOT NULL,
Payment_Method varchar(30) NOT NULL,
User_ID int NOT NULL,
CART_ID int NOT NULL,
foreign key (User_ID)
references USERS(User_ID),
foreign key (Cart_ID)
references CART(Cart_ID),
)
create table ORDER_HISTORY
(
User_ID int NOT NULL,
Order_ID int NOT NULL,
primary key (User_ID, Order_ID),
foreign key (User_ID)
references USERS(User_ID),
foreign key (Order_ID)
references ORDERS(Order_ID)
)
我试过修改和移动它们,但无法让错误消失。我怀疑这可能非常简单明了,但由于我是 SQL 的新手,所以我可能会错过它。
在table购物车中,需要用PRIMARY KEY定义Cart_ID。如果出于某种原因您不能或不想定义 PRIMARY KEY,请尝试在同一列上使用 UNIQUE KEY 约束。
cart
有一个复合主键 (cart_id, order_id)
。这些列中的每一列都不是独立的主键,只是它们的组合。来自 orders
的外键应该作用相同 - 你应该有一个基于两者组合的外键:
create table ORDERS
(
Order_ID int NOT NULL primary key,
Total_Price float NOT NULL,
Payment_Method varchar(30) NOT NULL,
User_ID int NOT NULL,
CART_ID int NOT NULL,
foreign key (User_ID)
references USERS(User_ID),
foreign key (Cart_ID, User_id) -- here
references CART(Cart_ID, User_id),
)
由于table CART
有复合主键,那么你应该引用一个复合主键:
create table ORDERS
(
Order_ID int NOT NULL primary key,
Total_Price float NOT NULL,
Payment_Method varchar(30) NOT NULL,
User_ID int NOT NULL,
CART_ID int NOT NULL,
foreign key (User_ID)
references USERS(User_ID),
foreign key (Cart_ID, User_ID)
references CART(Cart_ID, User_ID),
)
这是购物车上的主键table。
CREATE TABLE [dbo].[CART](
[User_ID] [int] NOT NULL,
[Cart_ID] [int] NOT NULL,
[Total_Price] [float] NOT NULL,
CONSTRAINT [PK__CART__D6AB58B9B18E85A5] PRIMARY KEY CLUSTERED
(
[User_ID] ASC,
[Cart_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[CART] WITH CHECK ADD FOREIGN KEY([User_ID])
REFERENCES [dbo].[USERS] ([User_ID])
我正在尝试创建一些基本的 SQL 表,但是我不断收到以下错误:
There are no primary or candidate keys in the referenced table 'CART' that match the referencing column list in the foreign key 'FK__ORDERS__CART_ID__2B3F6F97'
这是我当前使用的代码。
create table USERS
(
User_ID int NOT NULL primary key,
Address varchar(30) NOT NULL,
Email varchar(30) NOT NULL,
Password varchar(30) NOT NULL,
Phone varchar(30) NOT NULL,
F_Name varchar(30) NOT NULL,
L_Name varchar(30) NOT NULL,
Date_of_Birth varchar(30) NOT NULL
)
create table PAYMENT
(
User_ID int NOT NULL primary key,
Credit_Card varchar(30) NOT NULL,
Debit_Card varchar(30) NOT NULL,
Google_Pay varchar(30) NOT NULL,
Apple_Pay varchar(30) NOT NULL,
Paypal varchar(30) NOT NULL,
foreign key (User_ID)
references USERS(User_ID)
)
create table CART
(
User_ID int NOT NULL,
Cart_ID int NOT NULL,
Total_Price float NOT NULL,
primary key (Cart_ID, User_ID),
foreign key(User_ID)
references USERS(User_ID)
)
create table ORDERS
(
Order_ID int NOT NULL primary key,
Total_Price float NOT NULL,
Payment_Method varchar(30) NOT NULL,
User_ID int NOT NULL,
CART_ID int NOT NULL,
foreign key (User_ID)
references USERS(User_ID),
foreign key (Cart_ID)
references CART(Cart_ID),
)
create table ORDER_HISTORY
(
User_ID int NOT NULL,
Order_ID int NOT NULL,
primary key (User_ID, Order_ID),
foreign key (User_ID)
references USERS(User_ID),
foreign key (Order_ID)
references ORDERS(Order_ID)
)
我试过修改和移动它们,但无法让错误消失。我怀疑这可能非常简单明了,但由于我是 SQL 的新手,所以我可能会错过它。
在table购物车中,需要用PRIMARY KEY定义Cart_ID。如果出于某种原因您不能或不想定义 PRIMARY KEY,请尝试在同一列上使用 UNIQUE KEY 约束。
cart
有一个复合主键 (cart_id, order_id)
。这些列中的每一列都不是独立的主键,只是它们的组合。来自 orders
的外键应该作用相同 - 你应该有一个基于两者组合的外键:
create table ORDERS
(
Order_ID int NOT NULL primary key,
Total_Price float NOT NULL,
Payment_Method varchar(30) NOT NULL,
User_ID int NOT NULL,
CART_ID int NOT NULL,
foreign key (User_ID)
references USERS(User_ID),
foreign key (Cart_ID, User_id) -- here
references CART(Cart_ID, User_id),
)
由于table CART
有复合主键,那么你应该引用一个复合主键:
create table ORDERS
(
Order_ID int NOT NULL primary key,
Total_Price float NOT NULL,
Payment_Method varchar(30) NOT NULL,
User_ID int NOT NULL,
CART_ID int NOT NULL,
foreign key (User_ID)
references USERS(User_ID),
foreign key (Cart_ID, User_ID)
references CART(Cart_ID, User_ID),
)
这是购物车上的主键table。
CREATE TABLE [dbo].[CART](
[User_ID] [int] NOT NULL,
[Cart_ID] [int] NOT NULL,
[Total_Price] [float] NOT NULL,
CONSTRAINT [PK__CART__D6AB58B9B18E85A5] PRIMARY KEY CLUSTERED
(
[User_ID] ASC,
[Cart_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[CART] WITH CHECK ADD FOREIGN KEY([User_ID])
REFERENCES [dbo].[USERS] ([User_ID])