More polish for MFHD record display
[working/Evergreen.git] / Open-ILS / src / sql / Pg / 210.schema.serials.sql
1
2
3 DROP SCHEMA serial CASCADE;
4
5 BEGIN;
6
7 CREATE SCHEMA serial;
8
9 CREATE TABLE serial.record_entry (
10         id              BIGSERIAL       PRIMARY KEY,
11         record          BIGINT          REFERENCES biblio.record_entry (id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
12         owning_lib      INT             NOT NULL DEFAULT 1 REFERENCES actor.org_unit (id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
13         creator         INT             NOT NULL DEFAULT 1,
14         editor          INT             NOT NULL DEFAULT 1,
15         source          INT,
16         create_date     TIMESTAMP WITH TIME ZONE        NOT NULL DEFAULT now(),
17         edit_date       TIMESTAMP WITH TIME ZONE        NOT NULL DEFAULT now(),
18         active          BOOL            NOT NULL DEFAULT TRUE,
19         deleted         BOOL            NOT NULL DEFAULT FALSE,
20         marc            TEXT            NOT NULL,
21         last_xact_id    TEXT            NOT NULL
22 );
23 CREATE INDEX serial_record_entry_creator_idx ON serial.record_entry ( creator );
24 CREATE INDEX serial_record_entry_editor_idx ON serial.record_entry ( editor );
25 CREATE INDEX serial_record_entry_owning_lib_idx ON serial.record_entry ( owning_lib, deleted );
26
27 CREATE TABLE serial.full_rec (
28         id              BIGSERIAL       PRIMARY KEY,
29         record          BIGINT          NOT NULL REFERENCES serial.record_entry(id) DEFERRABLE INITIALLY DEFERRED,
30         tag             CHAR(3)         NOT NULL,
31         ind1            TEXT,
32         ind2            TEXT,
33         subfield        TEXT,
34         value           TEXT            NOT NULL,
35         index_vector    tsvector        NOT NULL
36 );
37 CREATE INDEX serial_full_rec_record_idx ON serial.full_rec (record);
38 CREATE INDEX serial_full_rec_tag_part_idx ON serial.full_rec (SUBSTRING(tag FROM 2));
39 CREATE TRIGGER serial_full_rec_fti_trigger
40         BEFORE UPDATE OR INSERT ON serial.full_rec
41         FOR EACH ROW EXECUTE PROCEDURE tsearch2(index_vector, value);
42
43 CREATE INDEX serial_full_rec_index_vector_idx ON serial.full_rec USING GIST (index_vector);
44 /* Enable LIKE to use an index for database clusters with locales other than C or POSIX */
45 CREATE INDEX serial_full_rec_value_tpo_index ON serial.full_rec (value text_pattern_ops);
46
47 CREATE TABLE serial.subscription (
48         id              SERIAL  PRIMARY KEY,
49         callnumber      BIGINT  REFERENCES asset.call_number (id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
50         uri             INT     REFERENCES asset.uri (id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
51         start_date      DATE    NOT NULL,
52         end_date        DATE    -- interpret NULL as current subscription 
53 );
54
55 CREATE TABLE serial.binding_unit (
56         id              SERIAL  PRIMARY KEY,
57         subscription    INT     NOT NULL REFERENCES serial.subscription (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
58         label           TEXT    NOT NULL,
59         CONSTRAINT bu_label_once_per_sub UNIQUE (subscription, label)
60 );
61
62 CREATE TABLE serial.issuance (
63         id              SERIAL  PRIMARY KEY,
64         subscription    INT     NOT NULL REFERENCES serial.subscription (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
65         target_copy     BIGINT  REFERENCES asset.copy (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
66         location        BIGINT  REFERENCES asset.copy_location(id) DEFERRABLE INITIALLY DEFERRED,
67         binding_unit    INT     REFERENCES serial.binding_unit (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
68         label           TEXT
69 );
70
71 CREATE TABLE serial.bib_summary (
72         id                      SERIAL  PRIMARY KEY,
73         subscription            INT     UNIQUE NOT NULL REFERENCES serial.subscription (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
74         generated_coverage      TEXT    NOT NULL,
75         textual_holdings        TEXT
76 );
77
78 CREATE TABLE serial.sup_summary (
79         id                      SERIAL  PRIMARY KEY,
80         subscription            INT     UNIQUE NOT NULL REFERENCES serial.subscription (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
81         generated_coverage      TEXT    NOT NULL,
82         textual_holdings        TEXT
83 );
84
85 CREATE TABLE serial.index_summary (
86         id                      SERIAL  PRIMARY KEY,
87         subscription            INT     UNIQUE NOT NULL REFERENCES serial.subscription (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED,
88         generated_coverage      TEXT    NOT NULL,
89         textual_holdings        TEXT
90 );
91
92 COMMIT;
93