1 CREATE TABLE MemberApp(
2 id INTEGER PRIMARY KEY,
7 forward BOOLEAN NOT NULL,
11 status
INTEGER NOT NULL,
12 applied
TIMESTAMP NOT NULL,
17 unix_passwd
TEXT NOT NULL,
21 CREATE SEQUENCE MemberAppSeq
START 1;
24 id INTEGER PRIMARY KEY,
26 amount
REAL NOT NULL);
28 CREATE SEQUENCE BalanceSeq
START 1;
31 (id, name, amount
) VALUES
35 id INTEGER PRIMARY KEY,
39 joined
TIMESTAMP NOT NULL,
41 shares
INTEGER NOT NULL,
44 FOREIGN KEY (bal
) REFERENCES Balance(id) ON DELETE CASCADE,
45 FOREIGN KEY (app
) REFERENCES MemberApp(id) ON DELETE CASCADE);
47 CREATE SEQUENCE WebUserSeq
START 1;
50 (id, name, rname
, bal
, joined
) VALUES
51 (0, 'adam', 'Adam Chlipala', 0, CURRENT_TIMESTAMP);
53 CREATE TABLE WebGroup(
54 id INTEGER PRIMARY KEY,
57 CREATE SEQUENCE WebGroupSeq
START 2;
67 CREATE TABLE Membership(
70 PRIMARY KEY (grp
, usr
),
71 FOREIGN KEY (grp
) REFERENCES WebGroup(id) ON DELETE CASCADE,
72 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE);
74 INSERT INTO Membership
78 INSERT INTO Membership
82 CREATE TABLE Transaction(
83 id INTEGER PRIMARY KEY,
87 stamp
TIMESTAMP NOT NULL);
89 CREATE SEQUENCE TransactionSeq
START 1;
95 PRIMARY KEY (trn
, usr
),
96 FOREIGN KEY (trn
) REFERENCES Transaction(id) ON DELETE CASCADE,
97 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE);
100 id INTEGER PRIMARY KEY,
101 usr
INTEGER NOT NULL,
104 starts
DATE NOT NULL,
106 votes
INTEGER NOT NULL,
107 official BOOL
NOT NULL,
108 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE);
110 CREATE SEQUENCE PollSeq
START 1;
112 CREATE TABLE PollChoice(
113 id INTEGER PRIMARY KEY,
114 pol
INTEGER NOT NULL,
117 FOREIGN KEY (pol
) REFERENCES Poll(id) ON DELETE CASCADE);
119 CREATE SEQUENCE PollChoiceSeq
START 1;
122 usr
INTEGER NOT NULL,
123 cho
INTEGER NOT NULL,
124 PRIMARY KEY (usr
, cho
),
125 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE,
126 FOREIGN KEY (cho
) REFERENCES PollChoice(id) ON DELETE CASCADE);
128 CREATE TABLE ContactKind(
129 id INTEGER PRIMARY KEY,
131 url
BOOLEAN NOT NULL,
135 CREATE SEQUENCE ContactKindSeq
START 1;
137 CREATE TABLE Contact(
138 id INTEGER PRIMARY KEY,
139 usr
INTEGER NOT NULL,
140 knd
INTEGER NOT NULL,
142 priv
INTEGER NOT NULL,
143 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE,
144 FOREIGN KEY (knd
) REFERENCES ContactKind(id) ON DELETE CASCADE);
146 CREATE SEQUENCE ContactSeq
START 1;
148 CREATE TABLE Location(
149 id INTEGER PRIMARY KEY,
152 FOREIGN KEY (parent
) REFERENCES Location(id) ON DELETE CASCADE);
154 CREATE SEQUENCE LocationSeq
START 1;
157 usr
INTEGER NOT NULL,
158 loc
INTEGER NOT NULL,
159 PRIMARY KEY (usr
, loc
),
160 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE,
161 FOREIGN KEY (loc
) REFERENCES Location(id) ON DELETE CASCADE);
164 id INTEGER PRIMARY KEY,
165 usr
INTEGER NOT NULL,
169 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE);
171 CREATE SEQUENCE LinkSeq
START 1;
173 CREATE TABLE SupCategory(
174 id INTEGER PRIMARY KEY,
175 grp
INTEGER NOT NULL,
178 FOREIGN KEY (grp
) REFERENCES WebGroup(id) ON DELETE CASCADE);
180 CREATE SEQUENCE SupCategorySeq
START 1;
182 CREATE TABLE SupIssue(
183 id INTEGER PRIMARY KEY,
184 usr
INTEGER NOT NULL,
185 cat
INTEGER NOT NULL,
187 priv
BOOLEAN NOT NULL,
188 status
INTEGER NOT NULL,
189 stamp
TIMESTAMP NOT NULL,
192 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE,
193 FOREIGN KEY (cat
) REFERENCES SupCategory(id) ON DELETE CASCADE);
195 CREATE SEQUENCE SupIssueSeq
START 1;
197 CREATE TABLE SupPost(
198 id INTEGER PRIMARY KEY,
199 usr
INTEGER NOT NULL,
200 iss
INTEGER NOT NULL,
202 stamp
TIMESTAMP NOT NULL,
203 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE,
204 FOREIGN KEY (iss
) REFERENCES SupIssue(id) ON DELETE CASCADE);
206 CREATE SEQUENCE SupPostSeq
START 1;
208 CREATE TABLE SupSubscription(
209 usr
INTEGER NOT NULL,
210 cat
INTEGER NOT NULL,
211 PRIMARY KEY (usr
, cat
),
212 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE,
213 FOREIGN KEY (cat
) REFERENCES SupCategory(id) ON DELETE CASCADE);
215 CREATE TABLE WebNode(
216 id INTEGER PRIMARY KEY,
219 debian
TEXT NOT NULL);
221 INSERT INTO WebNode (id, name, descr
, debian
)
222 VALUES (0, 'fyodor', 'old server', 'testing');
223 INSERT INTO WebNode (id, name, descr
, debian
)
224 VALUES (1, 'deleuze', 'main server', 'stable');
225 INSERT INTO WebNode (id, name, descr
, debian
)
226 VALUES (2, 'mire', 'member web server', 'stable');
229 id INTEGER PRIMARY KEY,
230 usr
INTEGER NOT NULL,
231 node
INTEGER NOT NULL,
234 status
INTEGER NOT NULL,
235 stamp
TIMESTAMP NOT NULL,
237 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE,
238 FOREIGN KEY (node
) REFERENCES WebNode(id) ON DELETE CASCADE);
240 CREATE SEQUENCE AptSeq
START 1;
243 id INTEGER PRIMARY KEY,
244 usr
INTEGER NOT NULL,
247 status
INTEGER NOT NULL,
248 stamp
TIMESTAMP NOT NULL,
250 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE);
252 CREATE SEQUENCE DomainSeq
START 1;
254 CREATE TABLE MailingList(
255 id INTEGER PRIMARY KEY,
256 usr
INTEGER NOT NULL,
259 status
INTEGER NOT NULL,
260 stamp
TIMESTAMP NOT NULL,
262 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE);
264 CREATE SEQUENCE MailingListSeq
START 1;
266 CREATE TABLE DirectoryPref(
267 usr
INTEGER PRIMARY KEY,
268 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE);
270 CREATE TABLE AppVote(
271 app
INTEGER NOT NULL,
272 usr
INTEGER NOT NULL,
273 PRIMARY KEY (app
, usr
),
274 FOREIGN KEY (app
) REFERENCES MemberApp(id) ON DELETE CASCADE,
275 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE);
277 CREATE VIEW WebUserPaying
278 AS SELECT id, name, rname
, bal
, joined
, app
, shares
, paypal
, checkout
280 JOIN (SELECT usr
FROM Membership
JOIN WebGroup
282 AND WebGroup.
name = 'paying') AS bob
285 CREATE VIEW WebUserActive
286 AS SELECT id, name, rname
, bal
, joined
, app
, shares
, paypal
, checkout
288 LEFT OUTER JOIN (SELECT usr
FROM Membership
JOIN WebGroup
289 ON grp
= WebGroup.
id AND (WebGroup.
name IN ('retired', 'phantom'))) AS mem
293 CREATE TABLE RollCall(
294 id INTEGER PRIMARY KEY,
297 started
TIMESTAMP NOT NULL);
299 CREATE SEQUENCE RollCallSeq
START 1;
301 CREATE TABLE RollCallEntry(
302 rol
INTEGER NOT NULL,
303 usr
INTEGER NOT NULL,
306 PRIMARY KEY (rol
, usr
),
307 FOREIGN KEY (rol
) REFERENCES RollCall(id) ON DELETE CASCADE,
308 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE);
311 id INTEGER PRIMARY KEY,
312 usr
INTEGER NOT NULL,
313 node
INTEGER NOT NULL,
316 status
INTEGER NOT NULL,
317 stamp
TIMESTAMP NOT NULL,
319 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE,
320 FOREIGN KEY (node
) REFERENCES WebNode(id) ON DELETE CASCADE);
322 CREATE SEQUENCE SecSeq
START 1;
325 id INTEGER PRIMARY KEY,
326 usr
INTEGER NOT NULL,
327 node
INTEGER NOT NULL,
330 status
INTEGER NOT NULL,
331 stamp
TIMESTAMP NOT NULL,
333 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE,
334 FOREIGN KEY (node
) REFERENCES WebNode(id) ON DELETE CASCADE);
336 CREATE SEQUENCE IpSeq
START 1;
339 id INTEGER PRIMARY KEY,
340 usr
INTEGER NOT NULL,
343 status
INTEGER NOT NULL,
344 stamp
TIMESTAMP NOT NULL,
346 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE);
348 CREATE SEQUENCE CertSeq
START 1;
351 id INTEGER PRIMARY KEY,
352 usr
INTEGER NOT NULL,
355 status
INTEGER NOT NULL,
356 stamp
TIMESTAMP NOT NULL,
358 FOREIGN KEY (usr
) REFERENCES WebUser(id) ON DELETE CASCADE);
360 CREATE SEQUENCE QuotaSeq
START 1;