-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathschema.sql
99 lines (86 loc) · 3 KB
/
schema.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
------------------------
-- Here we start the schema for blog posts.
------------------------
-- Create the categories table and index
DROP TABLE blog_categories CASCADE;
DROP TABLE blog_posts CASCADE;
DROP TABLE blog_comments CASCADE;
DROP TABLE blog_tags CASCADE;
DROP TABLE blog_tag_bridge CASCADE;
DROP TABLE blog_future_posts CASCADE;
CREATE TABLE IF NOT EXISTS blog_categories
( id SERIAL NOT NULL UNIQUE PRIMARY KEY
, name VARCHAR(128) NOT NULL
);
CREATE INDEX blog_categories_name_index ON blog_categories
( name
);
-- Then insert the valid values into it.
-- Make sure that there are no other values in it.
INSERT INTO blog_categories(name) VALUES
('uncategorized'),
('featured'),
('programming'),
('araboth')
;
--The post table
CREATE TABLE IF NOT EXISTS blog_posts
( id SERIAL NOT NULL UNIQUE PRIMARY KEY
, title VARCHAR(128) NOT NULL
, category INTEGER NOT NULL REFERENCES blog_categories(id)
, content TEXT NOT NULL
, time TIMESTAMP NOT NULL
);
--Future posts
CREATE TABLE IF NOT EXISTS blog_future_posts
( id SERIAL NOT NULL UNIQUE PRIMARY KEY
, json TEXT NOT NULL
, post_time TIMESTAMP NOT NULL
);
--The comment table.
--Note that comments can nest within themselves.
CREATE TABLE IF NOT EXISTS blog_comments
( id SERIAL NOT NULL UNIQUE PRIMARY KEY
, parent_post INTEGER REFERENCES blog_posts(id)
, author VARCHAR(128) NOT NULL
, author_email VARCHAR(128) NOT NULL
, parent_comment INTEGER REFERENCES blog_comments(id)
, content TEXT NOT NULL
, time TIMESTAMP NOT NULL
);
--Create the tag table, index, and bridge
CREATE TABLE IF NOT EXISTS blog_tags
( id SERIAL NOT NULL UNIQUE PRIMARY KEY
, name VARCHAR(128) NOT NULL
);
CREATE INDEX blog_tags_name_index ON blog_tags
( name
);
CREATE TABLE IF NOT EXISTS blog_tag_bridge
( post INTEGER NOT NULL REFERENCES blog_posts(id)
, tag INTEGER NOT NULL REFERENCES blog_tags(id)
, PRIMARY KEY (post, tag)
);
-------------------
--- Here we start the schema for the gallery.
-------------------
DROP TABLE gallery_categories CASCADE;
DROP TABLE gallery_images CASCADE;
CREATE TABLE IF NOT EXISTS gallery_categories
( id SERIAL NOT NULL UNIQUE PRIMARY KEY
, name VARCHAR(128) NOT NULL
, description VARCHAR(128) NOT NULL
);
INSERT INTO gallery_categories(name, description) VALUES
('uncategorized', 'Uncategorized Images'),
('araboth', 'Araboth'),
('hidden', 'hidden')
;
CREATE TABLE IF NOT EXISTS gallery_images
( id SERIAL NOT NULL UNIQUE PRIMARY KEY
, name VARCHAR(128) NOT NULL
, title VARCHAR(128) NOT NULL
, description TEXT NOT NULL
, category INTEGER REFERENCES gallery_categories(id)
, time TIMESTAMP NOT NULL
);