-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconstraint_Michailidis.txt
168 lines (121 loc) · 3.51 KB
/
constraint_Michailidis.txt
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
-- CONSTRAINTS
--PRIMARY KEYS
ALTER TABLE borrowers
ADD CONSTRAINT pk_borrowers_id
PRIMARY KEY (id);
ALTER TABLE authors
ADD CONSTRAINT pk_authors_id
PRIMARY KEY (id);
ALTER TABLE books
ADD CONSTRAINT pk_isbn
PRIMARY KEY (isbn);
ALTER TABLE copies
ADD CONSTRAINT pk_cop_id
PRIMARY KEY (cop_id);
ALTER TABLE loans
ADD CONSTRAINT pk_loans
PRIMARY KEY (b_id,cop_id,loan_date);
--FOREIGN KEYS
ALTER TABLE books
ADD CONSTRAINT fk_author_id
FOREIGN KEY (author_id)
REFERENCES authors (id) on delete set null;
ALTER TABLE copies
ADD CONSTRAINT fk_book_isbn
FOREIGN KEY (book_isbn)
REFERENCES books (isbn) on delete set null;
ALTER TABLE loans
ADD CONSTRAINT fk_loan_borrowers
FOREIGN KEY (b_id)
REFERENCES borrowers (id) on delete cascade;
ALTER TABLE loans
ADD CONSTRAINT fk_loan_copy
FOREIGN KEY (cop_id)
REFERENCES copies (cop_id) on delete cascade;
--UNIQUE KEYS
ALTER TABLE borrowers
ADD CONSTRAINT uk_email
UNIQUE (email);
--CHECK CONSTRAINTS
ALTER TABLE borrowers
ADD CONSTRAINT ck_borrowers_fname
CHECK (fname = UPPER(fname));
ALTER TABLE borrowers
ADD CONSTRAINT ck_borrowers_lname
CHECK (lname = UPPER(lname));
ALTER TABLE borrowers
ADD CONSTRAINT ck_borrowers_email
CHECK (email = UPPER(email));
ALTER TABLE borrowers
ADD CONSTRAINT ck_borrowers_tel
CHECK (tel_no = UPPER(tel_no));
ALTER TABLE borrowers
ADD CONSTRAINT ck_borrowers_gender
CHECK (GENDER IN ('F','M', 'O'));
-- Authors
ALTER TABLE authors
ADD CONSTRAINT ck_authors_fname
CHECK (fname = UPPER(fname));
ALTER TABLE authors
ADD CONSTRAINT ck_authors_lname
CHECK (lname = UPPER(lname));
ALTER TABLE authors
ADD CONSTRAINT ck_authors_date_death
CHECK (date_death > date_birth);
ALTER TABLE authors
ADD CONSTRAINT ck_authors_country
CHECK (country_origin = UPPER(country_origin));
ALTER TABLE authors
ADD CONSTRAINT ck_authors_gender
CHECK (GENDER IN ('F','M', 'O'));
-- Books
ALTER TABLE books
ADD CONSTRAINT ck_books_title
CHECK (title = UPPER(title));
ALTER TABLE books
ADD CONSTRAINT ck_books_genre
CHECK (GENRE IN ('ACTION','HISTORY', 'ANTHOLOGY', 'CHILDREN', 'CLASSIC', 'COMIC BOOK', 'CRIME', 'DRAMA', 'FAIRYTALE', 'FANTASY', 'NOVEL', 'HORROR', 'MYSTERY', 'PARANORMAL', 'PICTURE BOOK', 'POETRY', 'THRILLER','ROMACE', 'SATIRE', 'SCI-FI', 'THRILLER', 'WESTERN', 'ART', 'AUTOBIOGRAPHY', 'BUSINESS', 'CRAFTS', 'DIARY', 'DICTIONARY', 'ENCYCLOPEDIA', 'GUIDE', 'HEALTH', 'HUMOR', 'JOURNAL', 'MATH', 'PHILOSOPHY', 'RELIGION', 'TEXTBOOK', 'SCIENCE', 'TRAVEL', 'SPORTS'));
ALTER TABLE books
ADD CONSTRAINT ck_books_genre_nn
CHECK (GENRE IS NOT NULL);
ALTER TABLE books
ADD CONSTRAINT ck_books_n_pages
CHECK (n_pages > 0);
ALTER TABLE books
ADD CONSTRAINT ck_books_price
CHECK (price > 0);
-- Loans
ALTER TABLE loans
ADD CONSTRAINT ck_loans_return_date
CHECK (return_date >= loan_date);
--DEFAULTS
ALTER TABLE borrowers
MODIFY (gender
DEFAULT 'O');
ALTER TABLE authors
MODIFY (gender
DEFAULT 'O');
ALTER TABLE authors
MODIFY (country_origin
DEFAULT 'GREECE');
-- CREATE SEQUENCES
CREATE SEQUENCE seq_borrowers_id
INCREMENT BY 1
START WITH 1
NOCYCLE;
CREATE SEQUENCE seq_authors_id
INCREMENT BY 1
START WITH 1
NOCYCLE;
-- Show them All
select * FROM USER_CONSTRAINTS
where constraint_name Like 'PK%';
select * FROM USER_CONSTRAINTS
where constraint_name Like 'FK%';
select * FROM USER_CONSTRAINTS
where constraint_name Like 'CK%';
select * FROM USER_CONSTRAINTS
where constraint_name Like 'UK%';
select * FROM USER_CONSTRAINTS;
select * from all_sequences
where sequence_name Like 'SEQ%';