2011-11-19 11 views
1

私は質問に固執している課題があります。テーブルの構文を変更します。

"Sales Detail"テーブルをデータベースに追加します。この表は、OrdersおよびProducts表に関連しています。必要な場合は他のフィールドを追加しますが、なぜあなたの論文に追加したのか説明してください。

この表の説明は、図にはありません。ここで最高のデータベース設計スキルを使用してください!

Create Table SalesDetail 
(
    SaleDetailID int, 
    ProductID char(5), 
    ManufactureID char(3) not null, 
    OrderNo int, 
    qtyOrdered int 
    PRIMARY 
) 

Alter Table SalesDetail 
Add FOREIGN KEY (ProductID) 
REFERENCES Products(ProductID) 

私のエラーは、SalesDetailテーブルをProductsテーブルにリンクすることができません。それらを必要とするすべてのテーブルに

Msg 1776, Level 16, State 0, Line 1 
There are no primary or candidate keys in the referenced table 'Products' that match the referencing column list in the foreign key 'FK__SalesDeta__Produ__5EBF139D'. 

Msg 1750, Level 16, State 0, Line 1 
Could not create constraint. See previous errors. 


Create Table Customers 
(
CustomerNo char(4) 
Constraint ck_CustomerNoHas4positionsWithNumbers 
Check(CustomerNo like'[0-9],[0-9],[0-9],[0-9]'), 
Company varchar(50) not null, 
CustomerRep char(3), 
CreditLimt money default(20000.00), 
PRIMARY KEY(CustomerNo) 
) 

Create Table Salesreps 
(
EmployeeNo char(3) 
Constraint ck_EmployeeNoHasDigits check(EmployeeNo like'[0-9],[0-9],[0-9]'), 
FirstName varchar(25) not null, 
LastName varchar(25) not null, 
Age int, 
SalesRepOffice char(2) not null, 
Title varchar(50), 
HireDate Date not null, 
Manager char(3) not null, 
Quota money, 
Sales money not null, 
PRIMARY KEY(EmployeeNo) 
) 

Create Table Offices 
(
Office char(2) Constraint ck_checkOfficeHasNumbersOnly check(Office like'[0-9],[0-9]'), 
City varchar(25) not null, 
Region varchar(10) not null, 
Manager char(3) not null, 
Target money, 
Sales money not null 
PRIMARY KEY(Office) 
) 

Create Table Orders 
(
OrderNo int, 
OrderDate Date not null, 
CustomerNo char(4) not null, 
SalesRep char(3) not null 
PRIMARY KEY(OrderNo) 
) 

Create Table Products 
(
ManufactureID char(3) 
Constraint ck_ManufactureIDifItHasLettersOnly check(ManufactureID like'[a-z],[a-z],[a-z]'), 
ProductID char(5) 
Constraint ck_ProductIDhasTwoLettersAndThreeNumbers check(ProductID like'[0-9],[0-9],[a-z],[a-z],[a-z]'), 
Description varchar(50) not null, 
Price money not null, 
QtyOnHand int not null, 
PRIMARY KEY(ManufactureID, ProductID) 
) 

--add外部キー

Alter Table Customers 
Add constraint fk_customerrep 
FOREIGN KEY (CustomerRep) 
REFERENCES Salesreps(EmployeeNo) 

Alter Table Salesreps 
Add constraint fk_salesrepoffice 
FOREIGN KEY (SalesRepOffice) 
REFERENCES Offices(Office), 
constraint fk_manager 
FOREIGN KEY (Manager) 
REFERENCES Salesreps(EmployeeNo) 

Alter Table Offices 
Add constraint fk_officesmanger 
FOREIGN KEY (Manager) 
REFERENCES Salesreps(EmployeeNo) 

Alter Table Orders 
Add constraint fk_customerno 
FOREIGN KEY (CustomerNo) 
REFERENCES Customers(CustomerNo), 
constraint fk_salesrep 
FOREIGN KEY (SalesRep) 
REFERENCES Salesreps(EmployeeNo) 

答えて

2

テーブルProducts(ManufactureID, ProductID)複合キーを持っているので、あなたはユニークだけのProductIdによって製品を識別することはできません。したがって、ManufactureIdProductIDの両方を参照する複合外部キーを作成する必要があります。

1

のProductIDがエラーのような主キーではないと言います。あなたのコードで

PRIMARY KEY(ManufactureID, ProductID) 

これは、それらの両方の列が結合された主キーを作成します。

1

Productsの主キーは(ManufactureID, ProductID)です。だから、SalesDetail表には、これらの列の両方が含まれている必要があり、両方が外部キー制約の一部である必要があります:

Alter Table SalesDetail 
Add FOREIGN KEY (ManufactureID, ProductID) 
REFERENCES Products(ManufactureID, ProductID) 
関連する問題