Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

index-and-join.sql 2.7 KB

You have to be logged in to leave a comment. Sign In
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
  1. -- Create indexes and constraints
  2. ALTER TABLE authors ADD PRIMARY KEY (author_id);
  3. ALTER TABLE authors ADD CONSTRAINT author_key_uq UNIQUE (author_key);
  4. ALTER TABLE works ADD PRIMARY KEY (work_id);
  5. ALTER TABLE works ADD CONSTRAINT work_key_uq UNIQUE (work_key);
  6. ALTER TABLE editions ADD PRIMARY KEY (edition_id);
  7. ALTER TABLE editions ADD CONSTRAINT edition_key_uq UNIQUE (edition_key);
  8. -- Set up work-author join table
  9. DROP TABLE IF EXISTS work_authors CASCADE;
  10. CREATE TABLE work_authors
  11. AS SELECT work_id, author_id
  12. FROM authors
  13. JOIN (SELECT work_id, jsonb_array_elements((work_data->'authors')) #>> '{author,key}' AS author_key FROM works) w
  14. USING (author_key);
  15. CREATE INDEX work_author_wk_idx ON work_authors (work_id);
  16. CREATE INDEX work_author_au_idx ON work_authors (author_id);
  17. ALTER TABLE work_authors ADD CONSTRAINT work_author_wk_fk FOREIGN KEY (work_id) REFERENCES works;
  18. ALTER TABLE work_authors ADD CONSTRAINT work_author_au_fk FOREIGN KEY (author_id) REFERENCES authors;
  19. -- Set up edition-author join table
  20. DROP TABLE IF EXISTS edition_authors;
  21. CREATE TABLE edition_authors
  22. AS SELECT edition_id, author_id
  23. FROM authors
  24. JOIN (SELECT edition_id, jsonb_array_elements((edition_data->'authors')) ->> 'key' AS author_key
  25. FROM editions) e
  26. USING (author_key);
  27. CREATE INDEX edition_author_ed_idx ON edition_authors (edition_id);
  28. CREATE INDEX edition_author_au_idx ON edition_authors (author_id);
  29. ALTER TABLE edition_authors ADD CONSTRAINT edition_author_wk_fk FOREIGN KEY (edition_id) REFERENCES editions;
  30. ALTER TABLE edition_authors ADD CONSTRAINT edition_author_au_fk FOREIGN KEY (author_id) REFERENCES authors;
  31. -- Set up edition-work join table
  32. DROP TABLE IF EXISTS edition_works;
  33. CREATE TABLE edition_works
  34. AS SELECT edition_id, work_id
  35. FROM works
  36. JOIN (SELECT edition_id, jsonb_array_elements((edition_data->'works')) ->> 'key' AS work_key FROM editions) w
  37. USING (work_key);
  38. CREATE INDEX edition_work_ed_idx ON edition_works (edition_id);
  39. CREATE INDEX edition_work_au_idx ON edition_works (work_id);
  40. ALTER TABLE edition_works ADD CONSTRAINT edition_work_ed_fk FOREIGN KEY (edition_id) REFERENCES editions;
  41. ALTER TABLE edition_works ADD CONSTRAINT edition_work_wk_fk FOREIGN KEY (work_id) REFERENCES works;
  42. -- Extract ISBNs
  43. DROP TABLE IF EXISTS edition_isbn;
  44. CREATE TABLE edition_isbn
  45. AS SELECT edition_id, jsonb_array_elements_text(edition_data->'isbn_10') AS isbn
  46. FROM editions
  47. UNION
  48. SELECT edition_id, jsonb_array_elements_text(edition_data->'isbn_13') AS isbn
  49. FROM editions;
  50. CREATE INDEX edition_isbn_ed_idx ON edition_isbn (edition_id);
  51. CREATE INDEX edition_isbn_idx ON edition_isbn (isbn);
  52. ALTER TABLE edition_isbn ADD CONSTRAINT edition_work_ed_fk FOREIGN KEY (edition_id) REFERENCES editions;
  53. ANALYZE;
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...