star_schema.sql 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. -- Copyright Materialize, Inc. and contributors. All rights reserved.
  2. --
  3. -- Use of this software is governed by the Business Source License
  4. -- included in the LICENSE file at the root of this repository.
  5. --
  6. -- As of the Change Date specified in that file, in accordance with
  7. -- the Business Source License, use of this software will be governed
  8. -- by the Apache License, Version 2.0.
  9. -- Table definitions for a very simple star schema (one dimension and one fact table).
  10. -- Reset schema
  11. -- ------------
  12. DROP SCHEMA IF EXISTS star CASCADE;
  13. CREATE SCHEMA star;
  14. SET search_path = 'star';
  15. -- Fact table and data
  16. -- -------------------
  17. CREATE TABLE ft (k INT, v INT NOT NULL, fk1 INT, fk2 INT);
  18. CREATE INDEX ft_i1 ON ft(k);
  19. INSERT INTO ft VALUES
  20. -- one NULL row in ft
  21. (NULL, 100, 1, 2),
  22. -- 1-5 have one row each
  23. (1, 101, 1, 2),
  24. (2, 102, 2, 3),
  25. (3, 103, 3, 4),
  26. (4, 104, 4, 5),
  27. (5, 105, 5, 6)
  28. -- 7 is not present in either table
  29. ;
  30. -- Dimension table and data (d1)
  31. -- -----------------------------
  32. CREATE TABLE d1 (pk1 INT, pk2 INT NOT NULL, v INT NOT NULL);
  33. CREATE INDEX d1_i1 ON d1(pk1, pk2);
  34. INSERT INTO d1 VALUES
  35. -- pk1 != pk2 rows
  36. (NULL, 0, 0),
  37. (0, 0, 1),
  38. -- 1 not present in d1
  39. (2, 3, 0), (3, 2, 1),
  40. (3, 4, 0),
  41. -- 4 has no rows in d1
  42. (5, 6, 0), (6, 5, 1),
  43. (6, 7, 0),
  44. -- pk1 = pk2 rows
  45. (3, 3, 0),
  46. (5, 5, 0), (5, 5, 1)
  47. ;
  48. -- Dimension table and data (d2)
  49. -- -----------------------------
  50. CREATE TABLE d2 (pk1 INT, pk2 INT NOT NULL, v INT NOT NULL);
  51. CREATE INDEX d2_i1 ON d2(pk1, pk2);
  52. INSERT INTO d2 VALUES
  53. -- pk1 != pk2 rows
  54. (NULL, 0, 0),
  55. (1, 2, 0), (2, 1, 0),
  56. (2, 3, 0),
  57. (3, 4, 0), (4, 3, 1),
  58. (4, 5, 0),
  59. (NULL, 5, 0),
  60. -- 6 has no rows in d2
  61. -- pk1 = pk2 rows
  62. (3, 3, 0), (3, 3, 1),
  63. (4, 4, 0)
  64. ;
  65. -- Dimension table and data (d3)
  66. -- -----------------------------
  67. CREATE TABLE d3 (pk1 INT, pk2 INT, v INT NOT NULL);
  68. CREATE INDEX d3_i1 ON d3(pk1, pk2);
  69. INSERT INTO d3 VALUES
  70. -- pk1 != pk2 rows
  71. (0, 0, 1),
  72. -- 1 not present in d3
  73. (NULL, 2, 0),
  74. (3, 4, 0), (4, 3, 1),
  75. -- 4 has no rows in d3
  76. (5, 6, 0),
  77. (6, 7, 0), (7, 6, 1),
  78. -- pk1 = pk2 rows
  79. (NULL, NULL, 0),
  80. (3, 3, 0),
  81. (4, 4, 1),
  82. (5, 5, 0), (5, 5, 1)
  83. ;
  84. -- PK materialized views
  85. -- ---------------------
  86. CREATE MATERIALIZED VIEW ft_pk AS
  87. SELECT DISTINCT ON (k) k, v FROM ft;
  88. CREATE MATERIALIZED VIEW d1_pk AS
  89. SELECT DISTINCT ON (pk1, pk2) pk1, pk2, v FROM d1;
  90. CREATE MATERIALIZED VIEW d2_pk AS
  91. SELECT DISTINCT ON (pk1, pk2) pk1, pk2, v FROM d2;
  92. CREATE MATERIALIZED VIEW d3_pk AS
  93. SELECT DISTINCT ON (pk1, pk2) pk1, pk2, v FROM d3;