Изменить синтаксис таблицы Назначение - PullRequest
1 голос
/ 20 ноября 2011

У меня есть Задание, из-за которого я застрял в вопросе.

Добавьте таблицу «Сведения о продажах» в вашу базу данных.Эта таблица связана с таблицами заказов и продуктов.Он показывает, по крайней мере, заказанный продукт и количество (добавьте другие поля, если хотите, но объясните, почему вы добавили их на свой лист).

Нет описания этой таблицы на предоставленной диаграмме.Используйте свои лучшие навыки проектирования баз данных здесь!

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)
)

- Добавить внешние ключи во все таблицыкому они нужны

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)

Ответы [ 3 ]

2 голосов
/ 20 ноября 2011

Таблица Products имеет составной ключ (ManufactureID, ProductID), поэтому вы не можете однозначно идентифицировать продукт только по ProductId.Поэтому вы должны создать составной внешний ключ, который ссылается на ManufactureId и ProductID:

Alter Table SalesDetail
Add FOREIGN KEY (ManufactureId, ProductID)
REFERENCES Products(ManufactureID, ProductID)
1 голос
/ 20 ноября 2011

Первичный ключ для Products - (ManufactureID, ProductID). Таким образом, таблица SalesDetail должна содержать оба этих столбца, и оба должны быть частью ограничения внешнего ключа:

Alter Table SalesDetail
Add FOREIGN KEY (ManufactureID, ProductID)
REFERENCES Products(ManufactureID, ProductID)
1 голос
/ 20 ноября 2011

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

PRIMARY KEY(ManufactureID, ProductID)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...