当前,我正在尝试创建一个本地餐厅的关系数据库,该餐厅的表OrderTable
包含有关订单的信息,而另一个表则需要从其中获取一个组合主键OrderTable
。当前,我的OrderTable
具有复合主键:OrderNumber
和Date_Time
。这种逻辑背后的原因是我希望OrderNumber
每天重置一次。例如:
第1天:第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:
我明白了!我已经了解了我要执行的操作的缺陷。我应该包括两列而不是仅一列。