В ссылочной таблице нет первичных или потенциальных ключей, соответствующих списку столбцов во внешнем ключе - PullRequest
2 голосов
/ 11 апреля 2019

Я пытаюсь создать несколько базовых таблиц SQL, но получаю следующую ошибку:

В ссылочной таблице «CART» нет первичных ключей или ключей-кандидатов, которые соответствуют списку ссылочных столбцов во внешнем ключе «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, я, вероятно, упускаю его.

Ответы [ 4 ]

1 голос
/ 11 апреля 2019

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),
)
0 голосов
/ 11 апреля 2019

Это первичный ключ в таблице корзины.

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])
0 голосов
/ 11 апреля 2019

Поскольку таблица 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),
)
0 голосов
/ 11 апреля 2019

В таблице Cart вы должны определить Cart_ID с помощью PRIMARY KEY.Если по какой-либо причине вы не можете или не хотите определять PRIMARY KEY, попробуйте ограничение UNIQUE KEY для того же столбца.

...