Ссылка только на один первичный ключ из составного первичного ключа из другой таблицы - PullRequest
0 голосов
/ 26 сентября 2018

В настоящее время я пытаюсь создать реляционную базу данных местного ресторана с таблицей 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:

Понятно!Я понял недостаток того, что я пытаюсь сделать.Я должен включить оба столбца вместо одного.

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