2014-01-10 2 views
0

enter code here У меня есть проблемы с домашним заданием. Я понял, что мне нужно понять.Домашнее задание (ограничение единицы)

Хорошо, таким образом у меня есть 4 таблицы, 1: costumer 2: order 3: orderedproduct 4. product. Они связаны внешним ключом.

Мне нужно сделать уникальное ограничение, чтобы заказчик мог разместить только один уникальный заказ в день. Если тот же самый заказчик хочет заказать больше в тот же день, он должен быть записан в уже существующем порядке.


ТАБЛИЦЫ:

Costumer

CREATE TABLE COSTUMER (COSTUMERNR INT NOT NULL, 
        NAME VARCHAR(256), 
     CITY VARCHAR(256), 
     PRIMARY KEY (COSTUMERNR)) ENGINE=INNODB; 

заказ

CREATE TABLE ORDER (ORDERNR INT NOT NULL, 
        ORDERDATE DATETIME, 
        PRIMARY KEY (ORDERNR)), 
        FOREIGN KEY (COSTUMERNR) REFERENCES COSTUMER(COSTUMERNR) 
        ON DELETE CASCADE) ENGINE=INNODB; 

orderedproduct

CREATE TABLE ORDEREDPRODUCT (OPNR INT NOT NULL, 
         AMOUNT INT, 
         FOREIGN KEY (ORDERNR) REFERENCES ORDER(ORDERNR), 
FOREIGN KEY (PRODUCTCODE) REFERENCES PRODUCT (PRODUCTCODE) 
         ON DELETE CASCADE, 
         CHECK (AMOUNT=>0)) ENGINE=INNODB; 

продукт

CREATE TABLE PRODUCT (PRODUCTCODE INT NOT NULL, 
        NAME VARCHAR(256), 
      TYPE VARCHAR(256), 
        PRICE FLOAT, 
      STOCK INT, 
        PRIMARY KEY (PRODUCTCODE), 
CHECK (AMOUNT=>0)) ENGINE=INNODB; 
+0

вы shuld покажите, что вы до сих пор знаете. – Melon

+1

Мне жаль, что в моей жизни не было некоторых [клиентов] (https://www.google.co.uk/search?q=define%3Acostumer). Уметь иметь злые причудливые платья! – eggyal

ответ

1
alter table order add unique index(orderdate, COSTUMERNR); 
+0

Это гарантирует, что у каждой уникальной даты заказа есть уникальный заказчик? Как насчет того типа, который я выбрал (дата времени), не работает ли он в разное время, а не целый день? – DaViDa

+0

да, если вы храните время, вы можете просто сохранить дату в ORDERDATE с 00:00:00? Я бы сохранил дату времени в другом поле для этой цели под названием ORDERDATETIME – AnthonyBlake

+0

Спасибо за помощь Энтони! – DaViDa

0

Если вы можете разделить столбец DATETIME в столбец даты и времени столбца, вы можете использовать простое ограничение:

CREATE TABLE ORDER (
    ORDERNR INT NOT NULL, 
    ORDERDATE DATE, 
    ORDERTIME TIME, 
    ... 
CONSTRAINT [UniqueOrder] UNIQUE NONCLUSTERED 
(
    COSTUMERNR, ORDERDATE 
) 
Смежные вопросы