BiblioteQ
biblioteq_sqlite_create_schema.h
1 const char *sqlite_create_schema_text = "\
2 CREATE TABLE book \
3 ( \
4  accession_number TEXT, \
5  author TEXT NOT NULL, \
6  back_cover BYTEA, \
7  binding_type VARCHAR(32) NOT NULL, \
8  callnumber VARCHAR(64), \
9  category TEXT NOT NULL, \
10  condition TEXT, \
11  description TEXT NOT NULL, \
12  deweynumber VARCHAR(64), \
13  edition VARCHAR(8) NOT NULL, \
14  front_cover BYTEA, \
15  id VARCHAR(32) UNIQUE, \
16  isbn13 VARCHAR(32) UNIQUE, \
17  keyword TEXT, \
18  language VARCHAR(64) NOT NULL DEFAULT 'UNKNOWN', \
19  lccontrolnumber VARCHAR(64), \
20  location TEXT NOT NULL, \
21  marc_tags TEXT, \
22  monetary_units VARCHAR(64) NOT NULL DEFAULT 'UNKNOWN', \
23  myoid BIGINT NOT NULL, \
24  originality TEXT, \
25  pdate VARCHAR(32) NOT NULL, \
26  place TEXT NOT NULL, \
27  price NUMERIC(10, 2) NOT NULL DEFAULT 0.00, \
28  publisher TEXT NOT NULL, \
29  quantity INTEGER NOT NULL DEFAULT 1, \
30  title TEXT NOT NULL, \
31  type VARCHAR(16) NOT NULL DEFAULT 'Book' \
32 ); \
33  \
34 CREATE TABLE book_copy_info \
35 ( \
36  copy_number INTEGER NOT NULL DEFAULT 1, \
37  copyid VARCHAR(64) NOT NULL, \
38  myoid BIGINT NOT NULL, \
39  condition TEXT, \
40  item_oid BIGINT NOT NULL, \
41  originality TEXT, \
42  PRIMARY KEY(item_oid, copyid), \
43  FOREIGN KEY(item_oid) REFERENCES book(myoid) ON DELETE CASCADE \
44 ); \
45  \
46 CREATE TABLE book_files \
47 ( \
48  description TEXT, \
49  file BYTEA NOT NULL, \
50  file_digest TEXT NOT NULL, \
51  file_name TEXT NOT NULL, \
52  item_oid BIGINT NOT NULL, \
53  myoid BIGINT NOT NULL, \
54  FOREIGN KEY(item_oid) REFERENCES book(myoid) ON DELETE CASCADE, \
55  PRIMARY KEY(file_digest, item_oid) \
56 ); \
57  \
58 CREATE TRIGGER book_purge_trigger AFTER DELETE ON book \
59 FOR EACH row \
60 BEGIN \
61  DELETE FROM book_copy_info WHERE item_oid = old.myoid; \
62  DELETE FROM member_history WHERE item_oid = old.myoid AND \
63  type = old.type; \
64 END; \
65  \
66 CREATE TABLE cd \
67 ( \
68  accession_number TEXT, \
69  artist TEXT NOT NULL, \
70  back_cover BYTEA, \
71  category TEXT NOT NULL, \
72  cdaudio VARCHAR(32) NOT NULL DEFAULT 'Mono', \
73  cddiskcount INTEGER NOT NULL DEFAULT 1, \
74  cdformat VARCHAR(128) NOT NULL, \
75  cdrecording VARCHAR(32) NOT NULL DEFAULT 'Live', \
76  cdruntime VARCHAR(32) NOT NULL, \
77  description TEXT NOT NULL, \
78  front_cover BYTEA, \
79  id VARCHAR(32) NOT NULL PRIMARY KEY, \
80  keyword TEXT, \
81  language VARCHAR(64) NOT NULL DEFAULT 'UNKNOWN', \
82  location TEXT NOT NULL, \
83  monetary_units VARCHAR(64) NOT NULL DEFAULT 'UNKNOWN', \
84  myoid BIGINT NOT NULL, \
85  price NUMERIC(10, 2) NOT NULL DEFAULT 0.00, \
86  quantity INTEGER NOT NULL DEFAULT 1, \
87  rdate VARCHAR(32) NOT NULL, \
88  recording_label TEXT NOT NULL, \
89  title TEXT NOT NULL, \
90  type VARCHAR(16) NOT NULL DEFAULT 'CD' \
91 ); \
92  \
93 CREATE TABLE cd_songs \
94 ( \
95  albumnum INTEGER NOT NULL DEFAULT 1, \
96  artist TEXT NOT NULL DEFAULT 'UNKNOWN', \
97  composer TEXT NOT NULL DEFAULT 'UNKNOWN', \
98  item_oid BIGINT NOT NULL, \
99  runtime VARCHAR(32) NOT NULL, \
100  songnum INTEGER NOT NULL DEFAULT 1, \
101  songtitle VARCHAR(256) NOT NULL, \
102  PRIMARY KEY(item_oid, albumnum, songnum), \
103  FOREIGN KEY(item_oid) REFERENCES cd(myoid) ON DELETE CASCADE \
104 ); \
105  \
106 CREATE TABLE cd_copy_info \
107 ( \
108  copy_number INTEGER NOT NULL DEFAULT 1, \
109  copyid VARCHAR(64) NOT NULL, \
110  item_oid BIGINT NOT NULL, \
111  myoid BIGINT NOT NULL, \
112  PRIMARY KEY(item_oid, copyid), \
113  FOREIGN KEY(item_oid) REFERENCES cd(myoid) ON DELETE CASCADE \
114 ); \
115  \
116 CREATE TRIGGER cd_purge_trigger AFTER DELETE ON cd \
117 FOR EACH row \
118 BEGIN \
119  DELETE FROM cd_copy_info WHERE item_oid = old.myoid; \
120  DELETE FROM cd_songs WHERE item_oid = old.myoid; \
121  DELETE FROM member_history WHERE item_oid = old.myoid AND \
122  type = old.type; \
123 END; \
124  \
125 CREATE TABLE dvd \
126 ( \
127  accession_number TEXT, \
128  back_cover BYTEA, \
129  category TEXT NOT NULL, \
130  description TEXT NOT NULL, \
131  dvdactor TEXT NOT NULL, \
132  dvdaspectratio VARCHAR(64) NOT NULL, \
133  dvddirector TEXT NOT NULL, \
134  dvddiskcount INTEGER NOT NULL DEFAULT 1, \
135  dvdformat TEXT NOT NULL, \
136  dvdrating VARCHAR(64) NOT NULL, \
137  dvdregion VARCHAR(64) NOT NULL, \
138  dvdruntime VARCHAR(32) NOT NULL, \
139  front_cover BYTEA, \
140  id VARCHAR(32) NOT NULL PRIMARY KEY, \
141  keyword TEXT, \
142  language VARCHAR(64) NOT NULL DEFAULT 'UNKNOWN', \
143  location TEXT NOT NULL, \
144  monetary_units VARCHAR(64) NOT NULL DEFAULT 'UNKNOWN', \
145  myoid BIGINT NOT NULL, \
146  price NUMERIC(10, 2) NOT NULL DEFAULT 0.00, \
147  quantity INTEGER NOT NULL DEFAULT 1, \
148  rdate VARCHAR(32) NOT NULL, \
149  studio TEXT NOT NULL, \
150  title TEXT NOT NULL, \
151  type VARCHAR(16) NOT NULL DEFAULT 'DVD' \
152 ); \
153  \
154 CREATE TABLE dvd_copy_info \
155 ( \
156  copy_number INTEGER NOT NULL DEFAULT 1, \
157  copyid VARCHAR(64) NOT NULL, \
158  item_oid BIGINT NOT NULL, \
159  myoid BIGINT NOT NULL, \
160  PRIMARY KEY(item_oid, copyid), \
161  FOREIGN KEY(item_oid) REFERENCES dvd(myoid) ON DELETE CASCADE \
162 ); \
163  \
164 CREATE TRIGGER dvd_purge_trigger AFTER DELETE ON dvd \
165 FOR EACH row \
166 BEGIN \
167  DELETE FROM dvd_copy_info WHERE item_oid = old.myoid; \
168  DELETE FROM member_history WHERE item_oid = old.myoid AND \
169  type = old.type; \
170 END; \
171  \
172 CREATE TABLE grey_literature \
173 ( \
174  author TEXT NOT NULL, \
175  client TEXT, \
176  document_code_a TEXT NOT NULL, \
177  document_code_b TEXT NOT NULL, \
178  document_date TEXT NOT NULL, \
179  document_id TEXT NOT NULL PRIMARY KEY, \
180  document_status TEXT, \
181  document_title TEXT NOT NULL, \
182  document_type TEXT NOT NULL, \
183  front_cover BYTEA, \
184  job_number TEXT NOT NULL, \
185  location TEXT, \
186  myoid BIGINT UNIQUE, \
187  notes TEXT, \
188  type VARCHAR(16) NOT NULL DEFAULT 'Grey Literature' \
189 ); \
190  \
191 CREATE TABLE grey_literature_files \
192 ( \
193  description TEXT, \
194  file BYTEA NOT NULL, \
195  file_digest TEXT NOT NULL, \
196  file_name TEXT NOT NULL, \
197  item_oid BIGINT NOT NULL, \
198  myoid BIGINT NOT NULL, \
199  FOREIGN KEY(item_oid) REFERENCES grey_literature(myoid) ON \
200  DELETE CASCADE, \
201  PRIMARY KEY(file_digest, item_oid) \
202 ); \
203  \
204 CREATE TABLE journal \
205 ( \
206  accession_number TEXT, \
207  back_cover BYTEA, \
208  callnumber VARCHAR(64), \
209  category TEXT NOT NULL, \
210  description TEXT NOT NULL, \
211  deweynumber VARCHAR(64), \
212  front_cover BYTEA, \
213  id VARCHAR(32), \
214  issueno INTEGER NOT NULL DEFAULT 0, \
215  issuevolume INTEGER NOT NULL DEFAULT 0, \
216  keyword TEXT, \
217  language VARCHAR(64) NOT NULL DEFAULT 'UNKNOWN', \
218  lccontrolnumber VARCHAR(64), \
219  location TEXT NOT NULL, \
220  marc_tags TEXT, \
221  monetary_units VARCHAR(64) NOT NULL DEFAULT 'UNKNOWN', \
222  myoid BIGINT NOT NULL, \
223  pdate VARCHAR(32) NOT NULL, \
224  place TEXT NOT NULL, \
225  price NUMERIC(10, 2) NOT NULL DEFAULT 0.00, \
226  publisher TEXT NOT NULL, \
227  quantity INTEGER NOT NULL DEFAULT 1, \
228  title TEXT NOT NULL, \
229  type VARCHAR(16) NOT NULL DEFAULT 'Journal', \
230  UNIQUE(id, issueno, issuevolume) \
231 ); \
232  \
233 CREATE TABLE journal_copy_info \
234 ( \
235  copy_number INTEGER NOT NULL DEFAULT 1, \
236  copyid VARCHAR(64) NOT NULL, \
237  item_oid BIGINT NOT NULL, \
238  myoid BIGINT NOT NULL, \
239  PRIMARY KEY(item_oid, copyid), \
240  FOREIGN KEY(item_oid) REFERENCES journal(myoid) ON DELETE CASCADE \
241 ); \
242  \
243 CREATE TABLE journal_files \
244 ( \
245  description TEXT, \
246  file BYTEA NOT NULL, \
247  file_digest TEXT NOT NULL, \
248  file_name TEXT NOT NULL, \
249  item_oid BIGINT NOT NULL, \
250  myoid BIGINT NOT NULL, \
251  FOREIGN KEY(item_oid) REFERENCES journal(myoid) ON DELETE CASCADE, \
252  PRIMARY KEY(file_digest, item_oid) \
253 ); \
254  \
255 CREATE TRIGGER journal_purge_trigger AFTER DELETE ON journal \
256 FOR EACH row \
257 BEGIN \
258  DELETE FROM journal_copy_info WHERE item_oid = old.myoid; \
259  DELETE FROM member_history WHERE item_oid = old.myoid AND \
260  type = old.type; \
261 END; \
262  \
263 CREATE TABLE magazine \
264 ( \
265  accession_number TEXT, \
266  back_cover BYTEA, \
267  callnumber VARCHAR(64), \
268  category TEXT NOT NULL, \
269  description TEXT NOT NULL, \
270  deweynumber VARCHAR(64), \
271  front_cover BYTEA, \
272  id VARCHAR(32), \
273  issueno INTEGER NOT NULL DEFAULT 0, \
274  issuevolume INTEGER NOT NULL DEFAULT 0, \
275  keyword TEXT, \
276  language VARCHAR(64) NOT NULL DEFAULT 'UNKNOWN', \
277  lccontrolnumber VARCHAR(64), \
278  location TEXT NOT NULL, \
279  marc_tags TEXT, \
280  monetary_units VARCHAR(64) NOT NULL DEFAULT 'UNKNOWN', \
281  myoid BIGINT NOT NULL, \
282  pdate VARCHAR(32) NOT NULL, \
283  place TEXT NOT NULL, \
284  price NUMERIC(10, 2) NOT NULL DEFAULT 0.00, \
285  publisher TEXT NOT NULL, \
286  quantity INTEGER NOT NULL DEFAULT 1, \
287  title TEXT NOT NULL, \
288  type VARCHAR(16) NOT NULL DEFAULT 'Magazine', \
289  UNIQUE(id, issuevolume, issueno) \
290 ); \
291  \
292 CREATE TABLE magazine_copy_info \
293 ( \
294  copy_number INTEGER NOT NULL DEFAULT 1, \
295  copyid VARCHAR(64) NOT NULL, \
296  item_oid BIGINT NOT NULL, \
297  myoid BIGINT NOT NULL, \
298  PRIMARY KEY(item_oid, copyid), \
299  FOREIGN KEY(item_oid) REFERENCES magazine(myoid) ON DELETE CASCADE \
300 ); \
301  \
302 CREATE TABLE magazine_files \
303 ( \
304  description TEXT, \
305  file BYTEA NOT NULL, \
306  file_digest TEXT NOT NULL, \
307  file_name TEXT NOT NULL, \
308  item_oid BIGINT NOT NULL, \
309  myoid BIGINT NOT NULL, \
310  FOREIGN KEY(item_oid) REFERENCES magazine(myoid) ON DELETE CASCADE, \
311  PRIMARY KEY(file_digest, item_oid) \
312 ); \
313  \
314 CREATE TRIGGER magazine_purge_trigger AFTER DELETE ON magazine \
315 FOR EACH row \
316 BEGIN \
317  DELETE FROM magazine_copy_info WHERE item_oid = old.myoid; \
318  DELETE FROM member_history WHERE item_oid = old.myoid AND \
319  type = old.type; \
320 END; \
321  \
322 CREATE TABLE photograph_collection \
323 ( \
324  about TEXT, \
325  accession_number TEXT, \
326  id TEXT PRIMARY KEY NOT NULL, \
327  image BYTEA, \
328  image_scaled BYTEA, \
329  location TEXT NOT NULL, \
330  myoid BIGINT NOT NULL, \
331  notes TEXT, \
332  title TEXT NOT NULL, \
333  type VARCHAR(32) NOT NULL DEFAULT 'Photograph Collection' \
334 ); \
335  \
336 CREATE TABLE photograph \
337 ( \
338  accession_number TEXT, \
339  callnumber VARCHAR(64), \
340  collection_oid BIGINT NOT NULL, \
341  copyright TEXT NOT NULL, \
342  creators TEXT NOT NULL, \
343  format TEXT, \
344  id TEXT NOT NULL, \
345  image BYTEA, \
346  image_scaled BYTEA, \
347  medium TEXT NOT NULL, \
348  myoid BIGINT NOT NULL, \
349  notes TEXT, \
350  other_number TEXT, \
351  pdate VARCHAR(32) NOT NULL, \
352  quantity INTEGER NOT NULL DEFAULT 1, \
353  reproduction_number TEXT NOT NULL, \
354  subjects TEXT, \
355  title TEXT NOT NULL, \
356  PRIMARY KEY(id, collection_oid), \
357  FOREIGN KEY(collection_oid) REFERENCES \
358  photograph_collection(myoid) ON \
359  DELETE CASCADE \
360 ); \
361  \
362 CREATE TABLE videogame \
363 ( \
364  accession_number TEXT, \
365  back_cover BYTEA, \
366  description TEXT NOT NULL, \
367  developer TEXT NOT NULL, \
368  front_cover BYTEA, \
369  genre TEXT NOT NULL, \
370  id VARCHAR(32) NOT NULL PRIMARY KEY, \
371  keyword TEXT, \
372  language VARCHAR(64) NOT NULL DEFAULT 'UNKNOWN', \
373  location TEXT NOT NULL, \
374  monetary_units VARCHAR(64) NOT NULL DEFAULT 'UNKNOWN', \
375  myoid BIGINT NOT NULL, \
376  place TEXT NOT NULL, \
377  price NUMERIC(10, 2) NOT NULL DEFAULT 0.00, \
378  publisher TEXT NOT NULL, \
379  quantity INTEGER NOT NULL DEFAULT 1, \
380  rdate VARCHAR(32) NOT NULL, \
381  title TEXT NOT NULL, \
382  type VARCHAR(16) NOT NULL DEFAULT 'Video Game', \
383  vgmode VARCHAR(16) NOT NULL DEFAULT 'Multiplayer', \
384  vgplatform VARCHAR(64) NOT NULL, \
385  vgrating VARCHAR(64) NOT NULL \
386 ); \
387  \
388 CREATE TABLE videogame_copy_info \
389 ( \
390  copy_number INTEGER NOT NULL DEFAULT 1, \
391  copyid VARCHAR(64) NOT NULL, \
392  item_oid BIGINT NOT NULL, \
393  myoid BIGINT NOT NULL, \
394  PRIMARY KEY(item_oid, copyid), \
395  FOREIGN KEY(item_oid) REFERENCES videogame(myoid) ON \
396  DELETE CASCADE \
397 ); \
398  \
399 CREATE TRIGGER videogame_purge_trigger AFTER DELETE ON videogame \
400 FOR EACH row \
401 BEGIN \
402  DELETE FROM videogame_copy_info WHERE item_oid = old.myoid; \
403  DELETE FROM member_history WHERE item_oid = old.myoid AND \
404  type = old.type; \
405 END; \
406  \
407 CREATE TABLE item_borrower \
408 ( \
409  copy_number INTEGER NOT NULL DEFAULT 1, \
410  copyid VARCHAR(64) NOT NULL, \
411  duedate VARCHAR(32) NOT NULL, \
412  item_oid BIGINT NOT NULL, \
413  memberid VARCHAR(16) NOT NULL, \
414  myoid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \
415  reserved_by VARCHAR(128) NOT NULL, \
416  reserved_date VARCHAR(32) NOT NULL, \
417  type VARCHAR(16) NOT NULL, \
418  FOREIGN KEY(memberid) REFERENCES member ON DELETE RESTRICT \
419 ); \
420  \
421 CREATE TABLE member \
422 ( \
423  city VARCHAR(256) NOT NULL, \
424  comments TEXT, \
425  dob VARCHAR(32) NOT NULL, \
426  email VARCHAR(128), \
427  expiration_date VARCHAR(32) NOT NULL, \
428  first_name VARCHAR(128) NOT NULL, \
429  general_registration_number TEXT, \
430  last_name VARCHAR(128) NOT NULL, \
431  memberclass TEXT, \
432  memberid VARCHAR(16) NOT NULL PRIMARY KEY DEFAULT 1, \
433  membersince VARCHAR(32) NOT NULL, \
434  middle_init VARCHAR(1), \
435  overdue_fees NUMERIC(10, 2) NOT NULL DEFAULT 0.00, \
436  sex VARCHAR(32) NOT NULL DEFAULT 'Private', \
437  state_abbr VARCHAR(16) NOT NULL DEFAULT 'N/A', \
438  street VARCHAR(256) NOT NULL, \
439  telephone_num VARCHAR(32), \
440  zip VARCHAR(16) NOT NULL DEFAULT 'N/A' \
441 ); \
442  \
443 CREATE TABLE member_history \
444 ( \
445  memberid VARCHAR(16) NOT NULL, \
446  item_oid BIGINT NOT NULL, \
447  copyid VARCHAR(64) NOT NULL, \
448  reserved_date VARCHAR(32) NOT NULL, \
449  duedate VARCHAR(32) NOT NULL, \
450  returned_date VARCHAR(32) NOT NULL, \
451  myoid INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \
452  reserved_by VARCHAR(128) NOT NULL, \
453  type VARCHAR(16) NOT NULL, \
454  FOREIGN KEY(memberid) REFERENCES member(memberid) ON DELETE CASCADE \
455 ); \
456  \
457 CREATE TRIGGER member_history_trigger AFTER DELETE ON member \
458 FOR EACH row \
459 BEGIN \
460  DELETE FROM member_history WHERE memberid = old.memberid; \
461 END; \
462  \
463 CREATE VIEW item_borrower_vw AS \
464 SELECT copy_number, \
465  copyid, \
466  duedate, \
467  memberid, \
468  myoid, \
469  reserved_date, \
470  type, \
471  item_oid \
472 FROM item_borrower; \
473  \
474 CREATE TABLE book_binding_types \
475 ( \
476  binding_type TEXT NOT NULL PRIMARY KEY \
477 ); \
478  \
479 CREATE TABLE grey_literature_types \
480 ( \
481  document_type TEXT NOT NULL PRIMARY KEY \
482 ); \
483  \
484 CREATE TABLE locations \
485 ( \
486  location TEXT NOT NULL, \
487  type VARCHAR(32) NOT NULL, \
488  PRIMARY KEY(location, type) \
489 ); \
490  \
491 CREATE TABLE monetary_units \
492 ( \
493  monetary_unit TEXT NOT NULL PRIMARY KEY \
494 ); \
495  \
496 CREATE TABLE languages \
497 ( \
498  language TEXT NOT NULL PRIMARY KEY \
499 ); \
500  \
501 CREATE TABLE cd_formats \
502 ( \
503  cd_format TEXT NOT NULL PRIMARY KEY \
504 ); \
505  \
506 CREATE TABLE dvd_ratings \
507 ( \
508  dvd_rating TEXT NOT NULL PRIMARY KEY \
509 ); \
510  \
511 CREATE TABLE dvd_aspect_ratios \
512 ( \
513  dvd_aspect_ratio TEXT NOT NULL PRIMARY KEY \
514 ); \
515  \
516 CREATE TABLE dvd_regions \
517 ( \
518  dvd_region TEXT NOT NULL PRIMARY KEY \
519 ); \
520  \
521 CREATE TABLE minimum_days \
522 ( \
523  days INTEGER NOT NULL, \
524  type VARCHAR(16) NOT NULL PRIMARY KEY \
525 ); \
526  \
527 CREATE TABLE videogame_ratings \
528 ( \
529  videogame_rating TEXT NOT NULL PRIMARY KEY \
530 ); \
531  \
532 CREATE TABLE videogame_platforms \
533 ( \
534  videogame_platform TEXT NOT NULL PRIMARY KEY \
535 ); \
536  \
537 CREATE TABLE sequence \
538 ( \
539  value INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT \
540 ); \
541 ";