2014-01-09 5 views
0
/*Create Purchased Products Table*/ 
create table Purchased_Products 
(
School_ID INT not null, 
Product_ID INT not null, 
Purchased_Product_ID INT IDENTITY (1,1) not null, 
Quantity INT, 
Product_Status VARCHAR(1) 

    constraint Purchased_Products_PK PRIMARY KEY (School_ID, Product_ID, Purchased_Product_ID), 
    constraint Purchased_Products_FK1 FOREIGN KEY (School_ID) REFERENCES School(School_ID), 
    constraint Purchased_Products_FK2 FOREIGN KEY (Product_ID) REFERENCES Product(Product_ID) 
); 

create table Credentials 
(
Credential_ID INT IDENTITY (1,1) not null, 
Purchased_Product_ID INT not null, 
Username VARCHAR (30), 
PPassword VARCHAR (30), 
URL VARCHAR (100), 
Remote_Username VARCHAR (30), 
Remote_Password VARCHAR (30), 
Remote_URL VARCHAR (100), 
Notes VARCHAR (200), 

    constraint Credentials_PK PRIMARY KEY (Credential_ID, Purchased_Product_ID), 
    constraint Credentials_FK FOREIGN KEY (Purchased_Product_ID) REFERENCES Purchased_Products(Purchased_Product_ID) 

); 

Ok, поэтому я хочу, чтобы создать эту таблицу, учетные данные, но он дает мне ошибку:Почему мое ограничение внешнего ключа не работает?

Msg 1776, уровень 16, состояние 0, 1 линия Там нет ни одного первичного или ключи-кандидаты в ссылочной таблице «Purchased_Products», которые соответствуют списку столбцов ссылок в внешнем ключе «Credentials_FK». Msg 1750, уровень 16, состояние 0, строка 1 Не удалось создать ограничение. См. Предыдущие ошибки.

Кажется, что это позволило бы мне сделать это, но я не могу придумать, что я делаю. Может быть, я что-то упускаю? Помогите??!!??

+0

Вам нужен индекс или Purchased_Product_ID или установить его в качестве первичного ключа таблицы Purchased_product – dagfr

+0

Эрм ... это 'IDENTITY (1,1)' MySQL? Никогда этого не было, но я знаю [этот] (http://dev.mysql.com/doc/refman/5.5/en/example-auto-increment.html). – Wrikken

+0

@Wrikken Identity (1,1) действует также в MSSQL. – Aushin

ответ

2

Приобретено_ПродуктыПрибыл_Продукт_ID должен быть явно UNIQUE или явно ваш первичный ключ, чтобы он был ссылочным столбцом для вашего внешнего ключа.

CREATE UNIQUE NONCLUSTERED INDEX IndexName 
ON Purchased_Products(Purchased_Product_ID) 

Создание уникального индекса навязывает уникальности на колонке (или набор столбцов, если у вас есть более одного столбца в индексе) и SQL позволит использовать его в качестве справочного материала для внешнего ключа.

+0

Как сделать его уникальным? Спасибо вам за помощь! – SyracuseDave

+0

В таблице Purchased_Products? – SyracuseDave

+0

@ user1579871 Я отредактирую заявление в ответ – Aushin

0

Внешние ключи могут быть созданы только для столбцов с уникальными кубками, такими как первичный ключ или уникальный индекс.

Таблица Purchased_Products в настоящее время имеет только одно уникальное ограничение, являющееся соединением PK:

constraint Purchased_Products_PK 
    PRIMARY KEY (School_ID, Product_ID, Purchased_Product_ID) 

И таблица Credentials пытается обеспечить соблюдение внешнего ключа только на одном из этих колонн, а именно

constraint Credentials_FK 
    FOREIGN KEY (Purchased_Product_ID) 
    REFERENCES Purchased_Products(Purchased_Product_ID) 

Технически вам нужно будет повторить все столбцы составных ключей в Credentials (то есть School_ID, Product_ID, Purchased_Product_ID) и создать сложный внешний ке y на них.

Однако, кажется, что что-то не так в вашем дизайне стола - ваш выбор Primary Keys кажется неудачным, например. Purchased_Products имеет кандидат на простой суррогатный первичный ключ:

Purchased_Product_ID INT IDENTITY (1,1) not null 

Аналогично для Credentials, учитывая, что Credential_ID уже уникальна по identity, нет никакой необходимости добавлять Purchased_Product_ID к ПК. То, что вы, вероятно, хотите есть:

Table : Products 
Primary Key : ProductId 

Table : Purchased_Products 
Primary Key : Purchased_Product_ID 
Foreign Key : ProductID references Products(ProductId) 

Table : Credentials 
Primary Key : Credential_ID 
Foreign Key : Purchased_Product_ID references Purchased_Products(Purchased_Product_ID) 

т.д.

+0

Я считаю, что у него не должно быть составного ключа. Код Purchase_Product_ID уже является столбцом идентификации в таблице, в которой хранятся приобретенные продукты. Но я думаю, это не вопрос, не так ли? – Aushin

+0

Согласованные, сложные ключи - это проклятие. Но ПК ОП не рекомендуется. – StuartLC

Смежные вопросы