RelationalDesign: ddl_nutritioneer_0.0.sql

File ddl_nutritioneer_0.0.sql, 5.6 KB (added by 201165, 2 weeks ago)

version 1_ddl

Line 
1DDL SQL PostgreSQL:
2
3CREATE TYPE user_role AS ENUM (
4 'user',
5 'administrator',
6 'trainer'
7);
8
9CREATE TYPE ingredient_type AS ENUM (
10 'dairy',
11 'meat',
12 'fish',
13 'herb',
14 'carb',
15 'vegetable',
16 'fruit',
17 'legume',
18 'nut',
19 'seed',
20 'oil',
21 'spice',
22 'beverage',
23 'other'
24);
25
26CREATE TYPE nutrient_unit AS ENUM (
27 'milligram',
28 'gram',
29 'microgram'
30);
31
32CREATE TYPE nutrient_type AS ENUM (
33 'macro',
34 'micro'
35);
36
37CREATE TYPE restriction_type AS ENUM (
38 'vegan',
39 'vegetarian',
40 'halal',
41 'kosher',
42 'pescatarian',
43 'allergen',
44 'keto',
45 'paleo',
46 'gluten_free',
47 'lactose_free',
48 'diabetic',
49 'low_sodium',
50 'other'
51);
52
53CREATE TYPE post_status AS ENUM (
54 'published',
55 'draft',
56 'archived'
57);
58
59CREATE TABLE "user" (
60 email TEXT PRIMARY KEY,
61 username TEXT NOT NULL,
62 password TEXT NOT NULL,
63 role user_role NOT NULL DEFAULT 'user'
64);
65
66CREATE TABLE ingredient (
67 name TEXT NOT NULL PRIMARY KEY,
68 description TEXT NOT NULL,
69 energy NUMERIC NOT NULL,
70 kcal NUMERIC NOT NULL,
71 type ingredient_type NOT NULL DEFAULT 'other'
72);
73
74CREATE TABLE nutrient (
75 id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
76 quantity NUMERIC NOT NULL,
77 description TEXT NOT NULL,
78 unit nutrient_unit NOT NULL,
79 type nutrient_type NOT NULL
80);
81
82CREATE TABLE restriction (
83 id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
84 description TEXT NOT NULL,
85 type restriction_type NOT NULL
86);
87
88CREATE TABLE recipe (
89 id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
90 name TEXT NOT NULL,
91 guide TEXT NOT NULL,
92 kcal_sum NUMERIC NOT NULL,
93 user_email TEXT NOT NULL REFERENCES "user"(email) ON DELETE CASCADE
94);
95
96CREATE TABLE post (
97 id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
98 media BYTEA,
99 media_type TEXT,
100 media_name TEXT,
101 is_private BOOLEAN NOT NULL DEFAULT FALSE,
102 is_favourite BOOLEAN NOT NULL DEFAULT FALSE,
103 status post_status NOT NULL DEFAULT 'draft',
104 created_by TEXT NOT NULL REFERENCES "user"(email) ON DELETE CASCADE
105);
106
107CREATE TABLE comment (
108 id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
109 description TEXT NOT NULL,
110 post_id BIGINT NOT NULL REFERENCES post(id) ON DELETE CASCADE,
111 created_by TEXT NOT NULL REFERENCES "user"(email) ON DELETE CASCADE
112);
113
114CREATE TABLE grocery_list (
115 id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
116 date_time TIMESTAMP NOT NULL DEFAULT NOW(),
117 notes TEXT,
118 is_bought BOOLEAN NOT NULL DEFAULT FALSE,
119 kcal NUMERIC NOT NULL,
120 user_email TEXT NOT NULL REFERENCES "user"(email) ON DELETE CASCADE
121);
122
123CREATE TABLE intake_planner (
124 id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
125 date_time TIMESTAMP NOT NULL DEFAULT NOW(),
126 notes TEXT,
127 kcal NUMERIC NOT NULL,
128 is_consumed BOOLEAN NOT NULL DEFAULT FALSE,
129 user_email TEXT NOT NULL REFERENCES "user"(email) ON DELETE CASCADE
130);
131
132CREATE TABLE biometrics (
133 id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
134 date DATE NOT NULL,
135 weight NUMERIC,
136 height NUMERIC,
137 age NUMERIC,
138 muscle_fat_ratio NUMERIC,
139 user_email TEXT NOT NULL REFERENCES "user"(email) ON DELETE CASCADE
140);
141
142CREATE TABLE recipe_contains_ingredient (
143 recipe_id BIGINT NOT NULL REFERENCES recipe(id) ON DELETE CASCADE,
144 ingredient_name TEXT NOT NULL REFERENCES ingredient(name) ON DELETE CASCADE,
145 ingredient_quantity NUMERIC NOT NULL,
146 PRIMARY KEY (recipe_id, ingredient_name)
147);
148
149CREATE TABLE ingredient_contains_nutrient (
150 ingredient_name TEXT NOT NULL REFERENCES ingredient(name) ON DELETE CASCADE,
151 nutrient_id BIGINT NOT NULL REFERENCES nutrient(id) ON DELETE CASCADE,
152 quantity NUMERIC NOT NULL,
153 PRIMARY KEY (ingredient_name, nutrient_id)
154);
155
156CREATE TABLE recipe_contains_restriction (
157 recipe_id BIGINT NOT NULL REFERENCES recipe(id) ON DELETE CASCADE,
158 restriction_id BIGINT NOT NULL REFERENCES restriction(id) ON DELETE CASCADE,
159 PRIMARY KEY (recipe_id, restriction_id)
160);
161
162CREATE TABLE grocery_list_bulk_add_ingredient (
163 list_id BIGINT NOT NULL REFERENCES grocery_list(id) ON DELETE CASCADE,
164 recipe_id BIGINT NOT NULL REFERENCES recipe(id) ON DELETE CASCADE,
165 PRIMARY KEY (list_id, recipe_id)
166);
167
168CREATE TABLE grocery_list_single_add_ingredient (
169 list_id BIGINT NOT NULL REFERENCES grocery_list(id) ON DELETE CASCADE,
170 ingredient_name TEXT NOT NULL REFERENCES ingredient(name) ON DELETE CASCADE,
171 buy_quantity NUMERIC NOT NULL,
172 PRIMARY KEY (list_id, ingredient_name)
173);
174
175CREATE TABLE intake_planner_save_to_list_post (
176 planner_id BIGINT NOT NULL REFERENCES intake_planner(id) ON DELETE CASCADE,
177 post_id BIGINT NOT NULL REFERENCES post(id) ON DELETE CASCADE,
178 PRIMARY KEY (planner_id, post_id)
179);