【问题标题】:Homework help (unitique constraint)作业帮助(唯一性约束)
【发布时间】:2014-01-10 08:17:46
【问题描述】:

enter code here我在做作业时遇到了一些问题,我需要理解。

好的,所以我有 4 张桌子, 1:costumer 2:order 3:orderedproduct 4.product。 它们通过外键链接。

我需要制定一个独特的约束,以便客户每天只能下 1 个独特的订单。如果同一客户想在同一天订购更多,则必须写在已经存在的订单上。


表格

客户

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;

订购产品

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;

【问题讨论】:

  • 你应该展示你到目前为止尝试过的东西。
  • 我希望我的生活中有一些costumers。能够举办一些邪恶的化装派对!

标签: mysql sql constraints unique


【解决方案1】:
alter table order add unique index(orderdate, COSTUMERNR);

【讨论】:

  • 这样可以确保每个唯一的订单日期都有唯一的客户?我选择的类型(日期时间)在不同的时间而不是一整天都有效吗?
  • 是的,如果您要存储时间,您可能只是在 ORDERDATE 中存储时间为 00:00:00 的日期?为此,我会将日期和时间存储在另一个名为 ORDERDATETIME 的字段中
  • 感谢安东尼的帮助!
【解决方案2】:

如果您能够将日期时间列拆分为日期列和时间列,则可以使用简单的约束:

CREATE TABLE ORDER (
   ORDERNR INT NOT NULL,
   ORDERDATE DATE,
   ORDERTIME TIME,
    ...
CONSTRAINT [UniqueOrder] UNIQUE NONCLUSTERED
(
   COSTUMERNR, ORDERDATE
)  

【讨论】:

    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2023-03-11
    • 2017-03-26
    相关资源
    最近更新 更多