
CREATE TABLE Company
(
Cy_id char(5) PRIMARY KEY CHECK (Cy_id SIMILAR TO '[0-9][0-9][A-Z][0-9][0-9]'),
Cy_name text UNIQUE,
Cy_city text NOT NULL DEFAULT 'Paris',
Cy_adress text,
Cy_phone char(15) CHECK (Cy_phone SIMILAR TO '[0-9]\([0-9][0-9][0-9]\)[0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]'),
CONSTRAINT not_null_name CHECK (Cy_name IS NOT NULL)
);
CREATE TABLE Commande
(
Ce_id char(8) PRIMARY KEY CHECK (Ce_id SIMILAR TO '[0-9][0-9]\-[A-Z][A-Z]\-[0-9][0-9]'),
Ce_name text NOT NULL,
Ce_price int4 CHECK (Ce_price > 0),
Ce_volume int4 NOT NULL CHECK (Ce_volume > 10 AND Ce_volume <= 1000)
);
CREATE TABLE Execution
(
Cy_id char(5),
Ce_id char(8),
E_planned_date DATE NOT NULL DEFAULT CURRENT_DATE,
E_status boolean DEFAULT 'FALSE',
E_shipping_date date,
PRIMARY KEY(Cy_id, Ce_id),
FOREIGN KEY (Cy_id) REFERENCES Company(Cy_id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
FOREIGN KEY (Ce_id) REFERENCES Commande(Ce_id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
CHECK (E_shipping_date > E_planned_date)
); (E_shipping_date > E_planned_date)
);