В настоящее время я пытаюсь создать реляционную базу данных местного ресторана с таблицей OrderTable
, которая содержит информацию о заказах, и другой таблицей, которая должна будет взять один из составных первичных ключей из * 1002.*.В настоящее время мой OrderTable
имеет составной первичный ключ: OrderNumber
и Date_Time
.Причина этой логики в том, что я хочу, чтобы OrderNumber
сбрасывался каждый день.Например:
День 1: последний заказ первого дня - это сотый заказ, который получает 100
в качестве значения для столбца OrderNumber
.
День 2: как сегодняиначе, я бы предпочел сбросить OrderNumber
на значение 001
для первого порядка сегодня
. Поэтому мне нужны и OrderNumber
, и Date_Time
в качестве первичных ключей.Теперь у меня есть другая таблица, на которую нужно ссылаться только на OrderNumber
и , а не Date_Time
.Тем не менее, я не могу этого сделать.Решение, которое я нашел в Интернете, состоит в том, чтобы сослаться на оба столбца первичного ключа:
CREATE TABLE OrderFoodRel (
FoodID varchar(5) NOT NULL,
CookID varchar(7) NOT NULL,
OrderNumber varchar(3) NOT NULL,
Date_Time datetime NOT NULL,
Quantity tinyint NOT NULL,
CONSTRAINT PK_Relation PRIMARY KEY (FoodID, CookID, OrderNumber),
CONSTRAINT FK_FoodID FOREIGN KEY (FoodID) REFERENCES Food(FoodID),
CONSTRAINT FK_CookID FOREIGN KEY (CookID) REFERENCES Cook(CookID),
CONSTRAINT FK_OrderNumber FOREIGN KEY (OrderNumber, Date_Time) REFERENCES OrderTable(OrderNumber, Date_Time)
);
Есть ли способ ссылаться только на один из первичных ключей в OrderTable
?Или я неправильно рассматриваю концепцию составного первичного ключа (т. Е. Он состоит из неотделимых элементов)?
РЕДАКТИРОВАТЬ:
Это запрос, который я использовал для создания OrderTable
:
CREATE TABLE OrderTable (
OrderNumber varchar(3) NOT NULL,
Date_Time datetime NOT NULL,
WaitID varchar(7) NOT NULL,
CashID varchar(7),
TableNumber varchar(3) NOT NULL,
CONSTRAINT PK_Order PRIMARY KEY (OrderNumber, Date_Time),
CONSTRAINT FK_WaitID FOREIGN KEY (WaitID) REFERENCES WaiterWaitress(ID),
CONSTRAINT FK_CashID FOREIGN KEY (CashID) REFERENCES Cashier(ID),
CONSTRAINT FK_TableNumber FOREIGN KEY (TableNumber) REFERENCES RestTable(TableNumber)
);
РЕДАКТИРОВАТЬ 2:
Понятно!Я понял недостаток того, что я пытаюсь сделать.Я должен включить оба столбца вместо одного.