]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Postgres/040.schema.asset.sql
4276c78c23bc7dc92d52e2ae929d5d51c8ce5e81
[Evergreen.git] / Open-ILS / src / sql / Postgres / 040.schema.asset.sql
1 DROP SCHEMA asset CASCADE;
2
3 BEGIN;
4
5 CREATE SCHEMA asset;
6
7 CREATE TABLE asset.copy_location (
8         id              SERIAL  PRIMARY KEY,
9         name            TEXT    NOT NULL,
10         owning_lib      INT     NOT NULL REFERENCES actor.org_unit (id),
11         holdable        BOOL    NOT NULL DEFAULT TRUE,
12         opac_visible    BOOL    NOT NULL DEFAULT TRUE,
13         circulate       BOOL    NOT NULL DEFAULT TRUE
14 );
15 INSERT INTO asset.copy_location (name,owning_lib) VALUES ('Stacks',1);
16
17 CREATE TABLE asset.copy (
18         id              BIGSERIAL                       PRIMARY KEY,
19         circ_lib        INT                             NOT NULL REFERENCES actor.org_unit (id) DEFERRABLE INITIALLY DEFERRED,
20         creator         BIGINT                          NOT NULL,
21         create_date     TIMESTAMP WITH TIME ZONE        DEFAULT NOW(),
22         editor          BIGINT                          NOT NULL,
23         edit_date       TIMESTAMP WITH TIME ZONE        DEFAULT NOW(),
24         barcode         TEXT                            UNIQUE NOT NULL,
25         call_number     BIGINT                          NOT NULL,
26         copy_number     INT,
27         holdable        BOOL                            NOT NULL DEFAULT TRUE,
28         status          INT                             NOT NULL DEFAULT 0 REFERENCES config.copy_status (id) DEFERRABLE INITIALLY DEFERRED,
29         location        INT                             NOT NULL DEFAULT 1 REFERENCES asset.copy_location (id) DEFERRABLE INITIALLY DEFERRED,
30         loan_duration   INT                             NOT NULL CHECK ( loan_duration IN (1,2,3) ),
31         fine_level      INT                             NOT NULL CHECK ( fine_level IN (1,2,3) ),
32         circulate       BOOL                            NOT NULL DEFAULT TRUE,
33         deposit         BOOL                            NOT NULL DEFAULT FALSE,
34         deposit_amount  NUMERIC(6,2)                    NOT NULL DEFAULT 0.00,
35         price           NUMERIC(8,2)                    NOT NULL DEFAULT 0.00,
36         ref             BOOL                            NOT NULL DEFAULT FALSE,
37         circ_modifier   TEXT,
38         circ_as_type    TEXT,
39         opac_visible    BOOL                            NOT NULL DEFAULT TRUE
40 );
41 CREATE INDEX cp_cn_idx ON asset.copy (call_number);
42 CREATE INDEX cp_avail_cn_idx ON asset.copy (call_number) WHERE status = 0;
43
44 CREATE TABLE asset.copy_transparency (
45         id              SERIAL          PRIMARY KEY,
46         name            TEXT            NOT NULL,
47         owner           INT             NOT NULL REFERENCES actor.org_unit (id),
48         circ_lib        INT             REFERENCES actor.org_unit (id),
49         holdable        BOOL,
50         loan_duration   INT             CHECK ( loan_duration IN (1,2,3) ),
51         fine_level      INT             CHECK ( fine_level IN (1,2,3) ),
52         circulate       BOOL,
53         deposit         BOOL,
54         deposit_amount  NUMERIC(6,2),
55         ref             BOOL,
56         circ_modifier   TEXT,
57         circ_as_type    TEXT,
58         opac_visible    BOOL,
59         CONSTRAINT scte_name_once_per_lib UNIQUE (owner,name)
60 );
61
62 CREATE TABLE asset.copy_tranparency_map (
63         id              BIGSERIAL       PRIMARY KEY,
64         tansparency     INT     NOT NULL REFERENCES asset.copy_transparency (id),
65         target_copy     INT     NOT NULL UNIQUE REFERENCES asset.copy (id)
66 );
67 CREATE INDEX cp_tr_cp_idx ON asset.copy_tranparency_map (tansparency);
68
69 CREATE TABLE asset.stat_cat_entry_transparency_map (
70         id                      BIGSERIAL       PRIMARY KEY,
71         stat_cat                INT             NOT NULL, -- needs ON DELETE CASCADE
72         stat_cat_entry          INT             NOT NULL, -- needs ON DELETE CASCADE
73         owning_transparency     INT             NOT NULL, -- needs ON DELETE CASCADE
74         CONSTRAINT scte_once_per_trans UNIQUE (owning_transparency,stat_cat)
75 );
76
77 CREATE TABLE asset.stat_cat (
78         id              SERIAL  PRIMARY KEY,
79         owner           INT     NOT NULL, -- actor.org_unit.id
80         name            TEXT    NOT NULL,
81         opac_visible    BOOL NOT NULL DEFAULT FALSE,
82         CONSTRAINT sc_once_per_owner UNIQUE (owner,name)
83 );
84
85 CREATE TABLE asset.stat_cat_entry (
86         id              SERIAL  PRIMARY KEY,
87         owner           INT     NOT NULL, -- actor.org_unit.id
88         value           TEXT    NOT NULL,
89         CONSTRAINT sce_once_per_owner UNIQUE (owner,value)
90 );
91
92 CREATE TABLE asset.stat_cat_entry_copy_map (
93         id              BIGSERIAL       PRIMARY KEY,
94         stat_cat        INT             NOT NULL, -- needs ON DELETE CASCADE
95         stat_cat_entry  INT             NOT NULL, -- needs ON DELETE CASCADE
96         owning_copy     BIGINT          NOT NULL, -- needs ON DELETE CASCADE
97         CONSTRAINT sce_once_per_copy UNIQUE (owning_copy,stat_cat)
98 );
99
100 CREATE TABLE asset.copy_note (
101         id              BIGSERIAL                       PRIMARY KEY,
102         owning_copy     BIGINT                          NOT NULL,
103         creator         BIGINT                          NOT NULL,
104         create_date     TIMESTAMP WITH TIME ZONE        DEFAULT NOW(),
105         title           TEXT                            NOT NULL,
106         value           TEXT                            NOT NULL
107 );
108
109 CREATE TABLE asset.call_number (
110         id              bigserial PRIMARY KEY,
111         creator         BIGINT                          NOT NULL,
112         create_date     TIMESTAMP WITH TIME ZONE        DEFAULT NOW(),
113         editor          BIGINT                          NOT NULL,
114         edit_date       TIMESTAMP WITH TIME ZONE        DEFAULT NOW(),
115         record          bigint                          NOT NULL,
116         label           TEXT                            NOT NULL,
117         owning_lib      INT                             NOT NULL,
118         CONSTRAINT asset_call_number_label_once_per_lib UNIQUE (record, owning_lib, label)
119 );
120 CREATE INDEX asset_call_number_record_idx ON asset.call_number (record);
121 CREATE INDEX asset_call_number_creator_idx ON asset.call_number (creator);
122 CREATE INDEX asset_call_number_editor_idx ON asset.call_number (editor);
123
124 CREATE TABLE asset.call_number_note (
125         id              BIGSERIAL                       PRIMARY KEY,
126         call_number     BIGINT                          NOT NULL,
127         creator         BIGINT                          NOT NULL,
128         create_date     TIMESTAMP WITH TIME ZONE        DEFAULT NOW(),
129         title           TEXT                            NOT NULL,
130         value           TEXT                            NOT NULL
131 );
132
133
134 COMMIT;