|
| 1 | +CREATE TABLE reference ( |
| 2 | + reference_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), |
| 3 | + work_id UUID NOT NULL REFERENCES work(work_id) ON DELETE CASCADE, |
| 4 | + reference_ordinal INTEGER NOT NULL CHECK (reference_ordinal > 0), |
| 5 | + doi TEXT CHECK (doi ~* '^https:\/\/doi\.org\/10\.\d{4,9}\/[-._\;\(\)\/:a-zA-Z0-9]+$'), |
| 6 | + unstructured_citation TEXT CHECK (octet_length(unstructured_citation) >= 1), |
| 7 | + issn TEXT CHECK (issn ~* '\d{4}\-\d{3}(\d|X)'), |
| 8 | + isbn TEXT CHECK (octet_length(isbn) = 17), |
| 9 | + journal_title TEXT CHECK (octet_length(journal_title) >= 1), |
| 10 | + article_title TEXT CHECK (octet_length(article_title) >= 1), |
| 11 | + series_title TEXT CHECK (octet_length(series_title) >= 1), |
| 12 | + volume_title TEXT CHECK (octet_length(volume_title) >= 1), |
| 13 | + edition INTEGER CHECK (edition > 0), |
| 14 | + author TEXT CHECK (octet_length(author) >= 1), |
| 15 | + volume TEXT CHECK (octet_length(volume) >= 1), |
| 16 | + issue TEXT CHECK (octet_length(issue) >= 1), |
| 17 | + first_page TEXT CHECK (octet_length(first_page) >= 1), |
| 18 | + component_number TEXT CHECK (octet_length(component_number) >= 1), |
| 19 | + standard_designator TEXT CHECK (octet_length(standard_designator) >= 1), |
| 20 | + standards_body_name TEXT CHECK (octet_length(standards_body_name) >= 1), |
| 21 | + standards_body_acronym TEXT CHECK (octet_length(standards_body_acronym) >= 1), |
| 22 | + url TEXT CHECK (url ~* '^[^:]*:\/\/(?:[^\/:]*:[^\/@]*@)?(?:[^\/:.]*\.)+([^:\/]+)'), |
| 23 | + publication_date DATE, |
| 24 | + retrieval_date DATE, |
| 25 | + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 26 | + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, |
| 27 | + CONSTRAINT reference_reference_ordinal_work_id_uniq UNIQUE (work_id, reference_ordinal), |
| 28 | + CONSTRAINT reference_doi_andor_unstructured_citation CHECK |
| 29 | + (doi IS NOT NULL OR unstructured_citation IS NOT NULL), |
| 30 | + CONSTRAINT reference_standard_citation_required_fields CHECK |
| 31 | + ((standard_designator IS NOT NULL AND standards_body_name IS NOT NULL AND standards_body_acronym IS NOT NULL) |
| 32 | + OR |
| 33 | + (standard_designator IS NULL AND standards_body_name IS NULL AND standards_body_acronym IS NULL)) |
| 34 | +); |
| 35 | +SELECT diesel_manage_updated_at('reference'); |
| 36 | + |
| 37 | +CREATE TABLE reference_history ( |
| 38 | + reference_history_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), |
| 39 | + reference_id UUID NOT NULL REFERENCES reference(reference_id) ON DELETE CASCADE, |
| 40 | + account_id UUID NOT NULL REFERENCES account(account_id), |
| 41 | + data JSONB NOT NULL, |
| 42 | + timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP |
| 43 | +); |
0 commit comments