-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDDL.sql
121 lines (105 loc) · 4.03 KB
/
DDL.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
-- DROP TRIGGER
DROP TRIGGER TRG_LEASING_BIKE_INSERT_PRE;
DROP TRIGGER TRG_PART_INSERT_UPDATE_PRE;
DROP TRIGGER TRG_LEASING_PRE_UPDATE_ENDDATE
-- DROP CONSTRAINTS
ALTER TABLE bike DROP CONSTRAINT bike_fk1;
ALTER TABLE leasing_bike DROP CONSTRAINT leasing_bike_fk1;
ALTER TABLE leasing_bike DROP CONSTRAINT leasing_bike_fk2;
ALTER TABLE address DROP CONSTRAINT address_fk1;
ALTER TABLE customer DROP CONSTRAINT customer_fk1;
ALTER TABLE paymentinfo DROP CONSTRAINT paymentinfo_fk1;
ALTER TABLE leasing DROP CONSTRAINT leasing_fk1;
ALTER TABLE part DROP CONSTRAINT part_fk1;
ALTER TABLE part DROP CONSTRAINT part_fk2;
ALTER TABLE leasing_bike DROP CONSTRAINT leasing_bike_u1;
ALTER TABLE leasing DROP CONSTRAINT leasing_valid_total;
ALTER TABLE bike DROP CONSTRAINT bike_valid_price;
ALTER TABLE leasing DROP CONSTRAINT leasing_valid_dates;
-- DROP TABLES
DROP TABLE country;
DROP TABLE parttype;
DROP TABLE biketype;
DROP TABLE bike;
DROP TABLE address;
DROP TABLE customer;
DROP TABLE paymentinfo;
DROP TABLE leasing;
DROP TABLE part;
DROP TABLE leasing_bike;
-- CREATE ALL TABLES
CREATE TABLE bike(
bID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
pricePerDay NUMBER(6,2) NOT NULL,
biketype INTEGER NOT NULL
);
CREATE TABLE biketype(
btID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
type VARCHAR(40) NOT NULL
);
CREATE TABLE leasing_bike(
lbID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
leasing INTEGER NOT NULL,
bike INTEGER NOT NULL
);
CREATE TABLE country (
couID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(40) NOT NULL
);
CREATE TABLE address (
aID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
street VARCHAR(40) NOT NULL,
city VARCHAR(40) NOT NULL,
streetNo INTEGER NOT NULL,
postcode INTEGER NOT NULL,
country INTEGER NOT NULL
);
CREATE TABLE customer (
cID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
tel INTEGER NOT NULL,
email VARCHAR(40) NOT NULL,
firstname VARCHAR(40) NOT NULL,
name VARCHAR(40) NOT NULL,
address INTEGER NOT NULL
);
CREATE TABLE paymentinfo (
piID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
cardNo INTEGER NOT NULL,
owner VARCHAR(40) NOT NULL,
valid_till DATE NOT NULL,
customer INTEGER NOT NULL
);
CREATE TABLE leasing (
lID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
total NUMBER(6,2),
startDate DATE DEFAULT SYSDATE NOT NULL, -- Default value today
endDate DATE DEFAULT SYSDATE + 1 NOT NULL, -- Default leasing duration one day
customer INTEGER NOT NULL
);
CREATE TABLE part (
pID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name VARCHAR(40) NOT NULL,
pricePerDay NUMBER(6,2) NOT NULL,
leasing INTEGER,
parttype INTEGER NOT NULL
);
CREATE TABLE parttype (
ptID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
type varchar(40) NOT NULL
);
-- Adding Constrains
ALTER TABLE bike ADD CONSTRAINT bike_fk1 FOREIGN KEY (biketype) REFERENCES biketype(btID);
ALTER TABLE leasing_bike ADD CONSTRAINT leasing_bike_fk1 FOREIGN KEY (leasing) REFERENCES leasing(lID);
ALTER TABLE leasing_bike ADD CONSTRAINT leasing_bike_fk2 FOREIGN KEY (bike) REFERENCES bike(bID);
ALTER TABLE address ADD CONSTRAINT address_fk1 FOREIGN KEY (country) REFERENCES country(couID);
ALTER TABLE customer ADD CONSTRAINT customer_fk1 FOREIGN KEY (address) REFERENCES address(aID);
ALTER TABLE paymentinfo ADD CONSTRAINT paymentinfo_fk1 FOREIGN KEY (customer) REFERENCES customer(cID);
ALTER TABLE leasing ADD CONSTRAINT leasing_fk1 FOREIGN KEY (customer) REFERENCES customer(cID);
ALTER TABLE part ADD CONSTRAINT part_fk1 FOREIGN KEY (leasing) REFERENCES leasing(lID);
ALTER TABLE part ADD CONSTRAINT part_fk2 FOREIGN KEY (parttype) REFERENCES parttype(ptID);
-- Unique constraints
ALTER TABLE leasing_bike ADD CONSTRAINT leasing_bike_u1 UNIQUE (leasing, bike);
-- Check Constrains
ALTER TABLE leasing ADD CONSTRAINT leasing_valid_total CHECK (total>=0);
ALTER TABLE bike ADD CONSTRAINT bike_valid_price CHECK (pricePerDay>=0);
ALTER TABLE leasing ADD CONSTRAINT leasing_valid_dates CHECK (startDate<endDate);