从另一个表的组合主键中仅引用一个主键

时间:2018-09-26 15:53:07

标签: sql-server foreign-keys composite-primary-key

当前,我正在尝试创建一个本地餐厅的关系数据库,该餐厅的表OrderTable包含有关订单的信息,而另一个表则需要从其中获取一个组合主键OrderTable。当前,我的OrderTable具有复合主键:OrderNumberDate_Time。这种逻辑背后的原因是我希望OrderNumber每天重置一次。例如:

第1天:第1天的最后一个顺序是一百个顺序,该顺序接收100作为OrderNumber列的值。

第2天:由于今天不同,我宁愿将OrderNumber重置为今天的第一个值001

这就是为什么我需要同时使用OrderNumberDate_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:

我明白了!我已经了解了我要执行的操作的缺陷。我应该包括两列而不是仅一列。

0 个答案:

没有答案