我正在尝试创建一个简单的数据库,其中包含客户数据表和订单数据表。我希望写一个约束条件,使得在给定的一天内,客户不能订购超过特定数量的物品。以下是我的约束条件:
CREATE TABLE CUSTOMER
(
CUSTOMER_NUM CHAR(3) PRIMARY KEY,
CUSTOMER_NAME CHAR(35) NOT NULL,
STREET CHAR(15),
CITY CHAR(15),
STATE CHAR(3),
ZIP CHAR(5),
);
CREATE TABLE ORDERS
(
ORDER_NUM CHAR(5) PRIMARY KEY,
ORDER_DATE DATE,
CUSTOMER_NUM CHAR(3),
CONSTRAINT CUSTOMER_NUM_FKEY FOREIGN KEY (CUSTOMER_NUM)
REFRENCES CUSTOMER (CUSTOMER_NUM) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
);
这是我编写的强制约束条件,但它没有起作用。我认为原因在于ORDER_NUM和ORDER_DATE从未具有相等的值。
CREATE ASSERTION ITEM_LIMIT
CEHCK(
( SELECT COUNT(*)
FROM CUSTOMER C1, ORDERS O1
WHERE C1.CUSTOMER_NUM = O1.CUSTOMER_NUM AND
O1.ORDER_DATE = O1.ORDER_NUM
) <= 1000
我的问题是如何使此约束条件得以实现,比如我如何限制每天的订单数量。
ASSERTION
在像CREATE ASSERTION ...
这样的上下文中被理解为关键字,但允许将其用作标识符(因此允许使用类似CREATE TABLE assertion ...
的语句)。而且,PostgreSQL确实接受CREATE ASSERTION
语句,只是不强制执行它们描述的约束条件。 - ruakh