removing overly agressive locale normalization
[Evergreen.git] / Open-ILS / src / sql / Pg / 002.schema.config.sql
1 /*
2  * Copyright (C) 2004-2008  Georgia Public Library Service
3  * Copyright (C) 2008  Equinox Software, Inc.
4  * Mike Rylander <miker@esilibrary.com>
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  */
17
18
19
20 DROP SCHEMA stats CASCADE;
21 DROP SCHEMA config CASCADE;
22
23 BEGIN;
24 CREATE SCHEMA stats;
25
26 CREATE SCHEMA config;
27 COMMENT ON SCHEMA config IS $$
28 /*
29  * Copyright (C) 2005  Georgia Public Library Service 
30  * Mike Rylander <mrylander@gmail.com>
31  *
32  * The config schema holds static configuration data for the
33  * Open-ILS installation.
34  *
35  * ****
36  *
37  * This program is free software; you can redistribute it and/or
38  * modify it under the terms of the GNU General Public License
39  * as published by the Free Software Foundation; either version 2
40  * of the License, or (at your option) any later version.
41  *
42  * This program is distributed in the hope that it will be useful,
43  * but WITHOUT ANY WARRANTY; without even the implied warranty of
44  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
45  * GNU General Public License for more details.
46  */
47 $$;
48
49 CREATE TABLE config.bib_source (
50         id              SERIAL  PRIMARY KEY,
51         quality         INT     CHECK ( quality BETWEEN 0 AND 100 ),
52         source          TEXT    NOT NULL UNIQUE,
53         transcendant    BOOL    NOT NULL DEFAULT FALSE
54 );
55 COMMENT ON TABLE config.bib_source IS $$
56 /*
57  * Copyright (C) 2005  Georgia Public Library Service 
58  * Mike Rylander <mrylander@gmail.com>
59  *
60  * Valid sources of MARC records
61  *
62  * This is table is used to set up the relative "quality" of each
63  * MARC source, such as OCLC.
64  *
65  * ****
66  *
67  * This program is free software; you can redistribute it and/or
68  * modify it under the terms of the GNU General Public License
69  * as published by the Free Software Foundation; either version 2
70  * of the License, or (at your option) any later version.
71  *
72  * This program is distributed in the hope that it will be useful,
73  * but WITHOUT ANY WARRANTY; without even the implied warranty of
74  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
75  * GNU General Public License for more details.
76  */
77 $$;
78
79 CREATE TABLE config.standing (
80         id              SERIAL  PRIMARY KEY,
81         value           TEXT    NOT NULL UNIQUE
82 );
83 COMMENT ON TABLE config.standing IS $$
84 /*
85  * Copyright (C) 2005  Georgia Public Library Service 
86  * Mike Rylander <mrylander@gmail.com>
87  *
88  * Patron Standings
89  *
90  * This table contains the values that can be applied to a patron
91  * by a staff member.  These values should not be changed, other
92  * than for translation, as the ID column is currently a "magic
93  * number" in the source. :(
94  *
95  * ****
96  *
97  * This program is free software; you can redistribute it and/or
98  * modify it under the terms of the GNU General Public License
99  * as published by the Free Software Foundation; either version 2
100  * of the License, or (at your option) any later version.
101  *
102  * This program is distributed in the hope that it will be useful,
103  * but WITHOUT ANY WARRANTY; without even the implied warranty of
104  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
105  * GNU General Public License for more details.
106  */
107 $$;
108
109 CREATE TABLE config.xml_transform (
110         name            TEXT    PRIMARY KEY,
111         namespace_uri   TEXT    NOT NULL,
112         prefix          TEXT    NOT NULL,
113         xslt            TEXT    NOT NULL
114 );
115
116 CREATE TABLE config.metabib_field (
117         id              SERIAL  PRIMARY KEY,
118         field_class     TEXT    NOT NULL CHECK (lower(field_class) IN ('title','author','subject','keyword','series')),
119         name            TEXT    NOT NULL,
120         xpath           TEXT    NOT NULL,
121         weight          INT     NOT NULL DEFAULT 1,
122         format          TEXT    NOT NULL DEFAULT 'mods',
123         search_field    BOOL    NOT NULL DEFAULT TRUE,
124         facet_field     BOOL    NOT NULL DEFAULT FALSE
125 );
126 COMMENT ON TABLE config.metabib_field IS $$
127 /*
128  * Copyright (C) 2005  Georgia Public Library Service 
129  * Mike Rylander <mrylander@gmail.com>
130  *
131  * XPath used for record indexing ingest
132  *
133  * This table contains the XPath used to chop up MODS into its
134  * indexable parts.  Each XPath entry is named and assigned to
135  * a "class" of either title, subject, author, keyword or series.
136  * 
137  *
138  * ****
139  *
140  * This program is free software; you can redistribute it and/or
141  * modify it under the terms of the GNU General Public License
142  * as published by the Free Software Foundation; either version 2
143  * of the License, or (at your option) any later version.
144  *
145  * This program is distributed in the hope that it will be useful,
146  * but WITHOUT ANY WARRANTY; without even the implied warranty of
147  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
148  * GNU General Public License for more details.
149  */
150 $$;
151
152 CREATE UNIQUE INDEX config_metabib_field_class_name_idx ON config.metabib_field (field_class, name);
153
154 CREATE TABLE config.non_cataloged_type (
155         id              SERIAL          PRIMARY KEY,
156         owning_lib      INT             NOT NULL, -- REFERENCES actor.org_unit (id),
157         name            TEXT            NOT NULL,
158         circ_duration   INTERVAL        NOT NULL DEFAULT '14 days'::INTERVAL,
159         in_house        BOOL            NOT NULL DEFAULT FALSE,
160         CONSTRAINT noncat_once_per_lib UNIQUE (owning_lib,name)
161 );
162 COMMENT ON TABLE config.non_cataloged_type IS $$
163 /*
164  * Copyright (C) 2005  Georgia Public Library Service 
165  * Mike Rylander <mrylander@gmail.com>
166  *
167  * Types of valid non-cataloged items.
168  *
169  *
170  * ****
171  *
172  * This program is free software; you can redistribute it and/or
173  * modify it under the terms of the GNU General Public License
174  * as published by the Free Software Foundation; either version 2
175  * of the License, or (at your option) any later version.
176  *
177  * This program is distributed in the hope that it will be useful,
178  * but WITHOUT ANY WARRANTY; without even the implied warranty of
179  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
180  * GNU General Public License for more details.
181  */
182 $$;
183
184 CREATE TABLE config.identification_type (
185         id              SERIAL  PRIMARY KEY,
186         name            TEXT    NOT NULL UNIQUE
187 );
188 COMMENT ON TABLE config.identification_type IS $$
189 /*
190  * Copyright (C) 2005  Georgia Public Library Service 
191  * Mike Rylander <mrylander@gmail.com>
192  *
193  * Types of valid patron identification.
194  *
195  * Each patron must display at least one valid form of identification
196  * in order to get a library card.  This table lists those forms.
197  * 
198  *
199  * ****
200  *
201  * This program is free software; you can redistribute it and/or
202  * modify it under the terms of the GNU General Public License
203  * as published by the Free Software Foundation; either version 2
204  * of the License, or (at your option) any later version.
205  *
206  * This program is distributed in the hope that it will be useful,
207  * but WITHOUT ANY WARRANTY; without even the implied warranty of
208  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
209  * GNU General Public License for more details.
210  */
211 $$;
212
213 CREATE TABLE config.rule_circ_duration (
214         id              SERIAL          PRIMARY KEY,
215         name            TEXT            NOT NULL UNIQUE CHECK ( name ~ E'^\\w+$' ),
216         extended        INTERVAL        NOT NULL,
217         normal          INTERVAL        NOT NULL,
218         shrt            INTERVAL        NOT NULL,
219         max_renewals    INT             NOT NULL
220 );
221 COMMENT ON TABLE config.rule_circ_duration IS $$
222 /*
223  * Copyright (C) 2005  Georgia Public Library Service 
224  * Mike Rylander <mrylander@gmail.com>
225  *
226  * Circulation Duration rules
227  *
228  * Each circulation is given a duration based on one of these rules.
229  * 
230  *
231  * ****
232  *
233  * This program is free software; you can redistribute it and/or
234  * modify it under the terms of the GNU General Public License
235  * as published by the Free Software Foundation; either version 2
236  * of the License, or (at your option) any later version.
237  *
238  * This program is distributed in the hope that it will be useful,
239  * but WITHOUT ANY WARRANTY; without even the implied warranty of
240  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
241  * GNU General Public License for more details.
242  */
243 $$;
244
245 CREATE TABLE config.rule_max_fine (
246     id          SERIAL          PRIMARY KEY,
247     name        TEXT            NOT NULL UNIQUE CHECK ( name ~ E'^\\w+$' ),
248     amount      NUMERIC(6,2)    NOT NULL,
249     is_percent  BOOL            NOT NULL DEFAULT FALSE
250 );
251 COMMENT ON TABLE config.rule_max_fine IS $$
252 /*
253  * Copyright (C) 2005  Georgia Public Library Service 
254  * Mike Rylander <mrylander@gmail.com>
255  *
256  * Circulation Max Fine rules
257  *
258  * Each circulation is given a maximum fine based on one of
259  * these rules.
260  * 
261  *
262  * ****
263  *
264  * This program is free software; you can redistribute it and/or
265  * modify it under the terms of the GNU General Public License
266  * as published by the Free Software Foundation; either version 2
267  * of the License, or (at your option) any later version.
268  *
269  * This program is distributed in the hope that it will be useful,
270  * but WITHOUT ANY WARRANTY; without even the implied warranty of
271  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
272  * GNU General Public License for more details.
273  */
274 $$;
275
276 CREATE TABLE config.rule_recuring_fine (
277         id                      SERIAL          PRIMARY KEY,
278         name                    TEXT            NOT NULL UNIQUE CHECK ( name ~ E'^\\w+$' ),
279         high                    NUMERIC(6,2)    NOT NULL,
280         normal                  NUMERIC(6,2)    NOT NULL,
281         low                     NUMERIC(6,2)    NOT NULL,
282         recurance_interval      INTERVAL        NOT NULL DEFAULT '1 day'::INTERVAL
283 );
284 COMMENT ON TABLE config.rule_recuring_fine IS $$
285 /*
286  * Copyright (C) 2005  Georgia Public Library Service 
287  * Mike Rylander <mrylander@gmail.com>
288  *
289  * Circulation Recurring Fine rules
290  *
291  * Each circulation is given a recurring fine amount based on one of
292  * these rules.  The recurance_interval should not be any shorter
293  * than the interval between runs of the fine_processor.pl script
294  * (which is run from CRON), or you could miss fines.
295  * 
296  *
297  * ****
298  *
299  * This program is free software; you can redistribute it and/or
300  * modify it under the terms of the GNU General Public License
301  * as published by the Free Software Foundation; either version 2
302  * of the License, or (at your option) any later version.
303  *
304  * This program is distributed in the hope that it will be useful,
305  * but WITHOUT ANY WARRANTY; without even the implied warranty of
306  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
307  * GNU General Public License for more details.
308  */
309 $$;
310
311
312 CREATE TABLE config.rule_age_hold_protect (
313         id      SERIAL          PRIMARY KEY,
314         name    TEXT            NOT NULL UNIQUE CHECK ( name ~ E'^\\w+$' ),
315         age     INTERVAL        NOT NULL,
316         prox    INT             NOT NULL
317 );
318 COMMENT ON TABLE config.rule_age_hold_protect IS $$
319 /*
320  * Copyright (C) 2005  Georgia Public Library Service 
321  * Mike Rylander <mrylander@gmail.com>
322  *
323  * Hold Item Age Protection rules
324  *
325  * A hold request can only capture new(ish) items when they are
326  * within a particular proximity of the home_ou of the requesting
327  * user.  The proximity ('prox' column) is calculated by counting
328  * the number of tree edges between the user's home_ou and the owning_lib
329  * of the copy that could fulfill the hold.
330  * 
331  *
332  * ****
333  *
334  * This program is free software; you can redistribute it and/or
335  * modify it under the terms of the GNU General Public License
336  * as published by the Free Software Foundation; either version 2
337  * of the License, or (at your option) any later version.
338  *
339  * This program is distributed in the hope that it will be useful,
340  * but WITHOUT ANY WARRANTY; without even the implied warranty of
341  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
342  * GNU General Public License for more details.
343  */
344 $$;
345
346 CREATE TABLE config.copy_status (
347         id              SERIAL  PRIMARY KEY,
348         name            TEXT    NOT NULL UNIQUE,
349         holdable        BOOL    NOT NULL DEFAULT FALSE,
350         opac_visible    BOOL    NOT NULL DEFAULT FALSE
351 );
352 COMMENT ON TABLE config.copy_status IS $$
353 /*
354  * Copyright (C) 2005  Georgia Public Library Service 
355  * Mike Rylander <mrylander@gmail.com>
356  *
357  * Copy Statuses
358  *
359  * The available copy statuses, and whether a copy in that
360  * status is available for hold request capture.  0 (zero) is
361  * the only special number in this set, meaning that the item
362  * is available for immediate checkout, and is counted as available
363  * in the OPAC.
364  *
365  * Statuses with an ID below 100 are not removable, and have special
366  * meaning in the code.  Do not change them except to translate the
367  * textual name.
368  *
369  * You may add and remove statuses above 100, and these can be used
370  * to remove items from normal circulation without affecting the rest
371  * of the copy's values or its location.
372  *
373  * ****
374  *
375  * This program is free software; you can redistribute it and/or
376  * modify it under the terms of the GNU General Public License
377  * as published by the Free Software Foundation; either version 2
378  * of the License, or (at your option) any later version.
379  *
380  * This program is distributed in the hope that it will be useful,
381  * but WITHOUT ANY WARRANTY; without even the implied warranty of
382  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
383  * GNU General Public License for more details.
384  */
385 $$;
386
387 CREATE TABLE config.net_access_level (
388         id      SERIAL          PRIMARY KEY,
389         name    TEXT            NOT NULL UNIQUE
390 );
391 COMMENT ON TABLE config.net_access_level IS $$
392 /*
393  * Copyright (C) 2005  Georgia Public Library Service 
394  * Mike Rylander <mrylander@gmail.com>
395  *
396  * Patron Network Access level
397  *
398  * This will be used to inform the in-library firewall of how much
399  * internet access the using patron should be allowed.
400  *
401  * ****
402  *
403  * This program is free software; you can redistribute it and/or
404  * modify it under the terms of the GNU General Public License
405  * as published by the Free Software Foundation; either version 2
406  * of the License, or (at your option) any later version.
407  *
408  * This program is distributed in the hope that it will be useful,
409  * but WITHOUT ANY WARRANTY; without even the implied warranty of
410  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
411  * GNU General Public License for more details.
412  */
413 $$;
414
415 CREATE TABLE config.audience_map (
416         code            TEXT    PRIMARY KEY,
417         value           TEXT    NOT NULL,
418         description     TEXT
419 );
420
421 CREATE TABLE config.lit_form_map (
422         code            TEXT    PRIMARY KEY,
423         value           TEXT    NOT NULL,
424         description     TEXT
425 );
426
427 CREATE TABLE config.language_map (
428         code    TEXT    PRIMARY KEY,
429         value   TEXT    NOT NULL
430 );
431
432 CREATE TABLE config.item_form_map (
433         code    TEXT    PRIMARY KEY,
434         value   TEXT    NOT NULL
435 );
436
437 CREATE TABLE config.item_type_map (
438         code    TEXT    PRIMARY KEY,
439         value   TEXT    NOT NULL
440 );
441
442 CREATE TABLE config.bib_level_map (
443         code    TEXT    PRIMARY KEY,
444         value   TEXT    NOT NULL
445 );
446
447 CREATE TABLE config.i18n_locale (
448     code        TEXT    PRIMARY KEY,
449     marc_code   TEXT    NOT NULL REFERENCES config.language_map (code) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
450     name        TEXT    UNIQUE NOT NULL,
451     description TEXT
452 );
453
454 CREATE TABLE config.i18n_core (
455     id              BIGSERIAL   PRIMARY KEY,
456     fq_field        TEXT        NOT NULL,
457     identity_value  TEXT        NOT NULL,
458     translation     TEXT        NOT NULL    REFERENCES config.i18n_locale (code) ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
459     string          TEXT        NOT NULL
460 );
461
462 CREATE UNIQUE INDEX i18n_identity ON config.i18n_core (fq_field,identity_value,translation);
463
464 COMMIT;
465