-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsetup.sql
92 lines (67 loc) · 2.11 KB
/
setup.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
DROP TABLE Publisher, Form, Book, File, Topic, subtopic_of, book_topic, UseCase, usecase_book;
CREATE TABLE Publisher(
pub_id SERIAL PRIMARY KEY,
name VARCHAR(20)
);
CREATE TABLE Form(
form_id SERIAL PRIMARY KEY,
form_name VARCHAR(20) UNIQUE
);
CREATE TABLE Book(
book_id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
year INT,
pub_id INT,
form_id INT,
favorite BOOL default false,
CONSTRAINT publisher FOREIGN KEY (pub_id) REFERENCES Publisher
ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT form FOREIGN KEY (form_id) REFERENCES Form
ON DELETE SET NULL ON UPDATE CASCADE
);
CREATE TABLE File(
book_id INT,
collection_id SERIAL,
filepath VARCHAR(100) UNIQUE,
num_pages INT,
subname VARCHAR(20) DEFAULT '',
PRIMARY KEY(book_id, collection_id),
CONSTRAINT bookentity FOREIGN KEY (book_id) REFERENCES Book
ON DELETE CASCADE ON UPDATE CASCADE -- File is weak entity linked to book
);
CREATE TABLE Topic(
topic_name VARCHAR(40) PRIMARY KEY
);
CREATE TABLE subtopic_of(
basetopic_name VARCHAR(40),
subtopic_name VARCHAR(40),
PRIMARY KEY(basetopic_name, subtopic_name),
CONSTRAINT basetopicname FOREIGN KEY (basetopic_name) REFERENCES Topic
ON DELETE CASCADE ON UPDATE CASCADE, -- update: change name of topic, delete: no longer a thing here
CONSTRAINT subtopicname FOREIGN KEY (subtopic_name) REFERENCES Topic
ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE book_topic(
book_id INT,
topic_name VARCHAR(40),
PRIMARY KEY(book_id, topic_name),
CONSTRAINT bookentity FOREIGN KEY (book_id) REFERENCES Book
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT basetopicname FOREIGN KEY (topic_name) REFERENCES Topic
ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE UseCase(
usecase_id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
source VARCHAR(20),
metadata_path VARCHAR(100) UNIQUE
);
CREATE TABLE usecase_book(
book_id INT,
usecase_id INT,
PRIMARY KEY(book_id, usecase_id),
CONSTRAINT bookentity FOREIGN KEY (book_id) REFERENCES Book
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT usecaseentity FOREIGN KEY (usecase_id) REFERENCES UseCase
ON DELETE CASCADE ON UPDATE CASCADE
);