Skip to content

Commit 61fc4be

Browse files
committed
Update create_tables.sql
1 parent 7be0733 commit 61fc4be

File tree

1 file changed

+182
-20
lines changed

1 file changed

+182
-20
lines changed

data/create_tables.sql

Lines changed: 182 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,189 @@
1-
CREATE TABLE Cliente (
2-
IDCliente INTEGER PRIMARY KEY,
3-
NomeCliente TEXT,
4-
EmailCliente TEXT,
5-
Cidade TEXT
1+
CREATE TABLE Clients (
2+
id_client VARCHAR(6) PRIMARY KEY,
3+
name VARCHAR(100) NOT NULL,
4+
tax_id INTEGER UNIQUE NOT NULL CHECK (
5+
tax_id BETWEEN 100000000 AND 399999999
6+
), -- Portuguese standard tax number for individuals
7+
email VARCHAR(100) UNIQUE NOT NULL CHECK (
8+
email LIKE '%@%.%'
9+
),
10+
phone_number VARCHAR(9) UNIQUE NOT NULL CHECK (
11+
(phone_number LIKE '91%') OR
12+
(phone_number LIKE '92%') OR
13+
(phone_number LIKE '93%') OR
14+
(phone_number LIKE '96%') AND
15+
LENGTH(phone_number) = 9
16+
), -- Portuguese standard phonenumbers.
17+
date_of_birth DATE CHECK (
18+
date_of_birth <= CURRENT_DATE AND
19+
date_of_birth LIKE '____-__-__'
20+
),
21+
newsletter BOOLEAN NOT NULL DEFAULT FALSE,
22+
authorization BOOLEAN NOT NULL DEFAULT FALSE,
23+
acquisition_channel VARCHAR(100) CHECK (
24+
acquisition_channel IN ('Instagram', 'Facebook', 'Tik Tok', 'Google', 'Events', 'TheFork', 'Email Marketing', 'Friend Recommendation')
25+
),
26+
modified_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
27+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
628
);
729

8-
CREATE TABLE Plano (
9-
Plano TEXT PRIMARY KEY,
10-
PrecoMensal DECIMAL
30+
CREATE TABLE Products (
31+
id_product VARCHAR(6) PRIMARY KEY,
32+
name VARCHAR(100) UNIQUE NOT NULL,
33+
description TEXT,
34+
product_type VARCHAR(20) NOT NULL CHECK (
35+
product_type IN ('beer', 'snacks')
36+
),
37+
sale_price DECIMAL(10,2) NOT NULL,
38+
current_stock FLOAT NOT NULL,
39+
minimum_stock FLOAT NOT NULL,
40+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
41+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
1142
);
1243

13-
CREATE TABLE Assinatura (
14-
IDAssinatura INTEGER PRIMARY KEY,
15-
IDCliente INTEGER,
16-
Plano TEXT,
17-
Pagamento TEXT,
18-
DataInicio DATE,
19-
FOREIGN KEY (IDCliente) REFERENCES Cliente(IDCliente),
20-
FOREIGN KEY (Plano) REFERENCES Plano(Plano)
44+
ALTER TABLE Products
45+
ADD COLUMN purchase_price DECIMAL(10,2); -- Adds purchase_price column. Stores the purchase cost of the product.
46+
47+
CREATE TABLE Employees (
48+
id_employee VARCHAR(6) PRIMARY KEY,
49+
name VARCHAR(100) NOT NULL,
50+
identification_doc VARCHAR(12) NOT NULL CHECK (
51+
identification_doc GLOB '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] [A-Z][A-Z] [0-9]'
52+
), -- Portuguese standard for id number
53+
tax_id INTEGER UNIQUE NOT NULL CHECK (
54+
tax_id BETWEEN 100000000 AND 399999999
55+
), -- Portuguese standard tax number for individuals
56+
email VARCHAR(100) UNIQUE NOT NULL CHECK (
57+
email LIKE '%@%.%'
58+
),
59+
phone_number VARCHAR(9) UNIQUE NOT NULL CHECK (
60+
(phone_number LIKE '91%') OR
61+
(phone_number LIKE '92%') OR
62+
(phone_number LIKE '93%') OR
63+
(phone_number LIKE '96%') AND
64+
LENGTH(phone_number) = 9
65+
), -- Portuguese standard phonenumbers.
66+
role VARCHAR(50) NOT NULL,
67+
date_of_birth DATE CHECK (
68+
date_of_birth <= CURRENT_DATE AND
69+
date_of_birth LIKE '____-__-__'
70+
),
71+
address TEXT,
72+
iban VARCHAR(25) NOT NULL CHECK (
73+
iban LIKE 'PT%' AND LENGTH(iban)=25
74+
), -- Portuguese standard for IBAN.
75+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
76+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
77+
);
78+
79+
CREATE TABLE Suppliers (
80+
id_supplier VARCHAR(6) PRIMARY KEY,
81+
company_name VARCHAR(100) NOT NULL,
82+
tax_id INTEGER UNIQUE NOT NULL CHECK (
83+
tax_id BETWEEN 500000000 AND 599999999
84+
), -- portuguese standard for companies tax id
85+
email VARCHAR(100) UNIQUE NOT NULL CHECK (
86+
email LIKE '%@%.%'
87+
),
88+
phone_number VARCHAR(9) UNIQUE NOT NULL CHECK (
89+
(phone_number LIKE '91%') OR
90+
(phone_number LIKE '92%') OR
91+
(phone_number LIKE '93%') OR
92+
(phone_number LIKE '96%') AND
93+
LENGTH(phone_number) = 9
94+
), -- Portuguese standard phonenumbers.
95+
contact_person VARCHAR(100),
96+
address TEXT,
97+
country VARCHAR(50),
98+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
99+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
100+
);
101+
102+
CREATE TABLE Reviews (
103+
id_client VARCHAR(6) PRIMARY KEY,
104+
rating INTEGER CHECK (rating BETWEEN 1 AND 5),
105+
comment TEXT,
106+
visibility BOOLEAN NOT NULL DEFAULT TRUE,
107+
review_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
108+
FOREIGN KEY (id_client) REFERENCES Clients(id_client)
109+
);
110+
111+
CREATE TABLE Events (
112+
id_event VARCHAR(6) PRIMARY KEY,
113+
name VARCHAR(100) NOT NULL,
114+
description TEXT,
115+
event_type VARCHAR(50) NOT NULL CHECK (
116+
event_type IN ('party', 'workshop', 'launch', 'other')
117+
),
118+
event_date DATE NOT NULL,
119+
event_time TIME NOT NULL,
120+
location VARCHAR(100),
121+
capacity INTEGER NOT NULL CHECK (capacity > 0),
122+
private_event BOOLEAN NOT NULL DEFAULT FALSE,
123+
price DECIMAL(10,2),
124+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
125+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
126+
);
127+
128+
CREATE TABLE Event_Participations (
129+
id_event VARCHAR(6) NOT NULL,
130+
id_client VARCHAR(6) NOT NULL,
131+
registration_date DATETIME DEFAULT CURRENT_TIMESTAMP,
132+
PRIMARY KEY (id_event, id_client),
133+
FOREIGN KEY (id_event) REFERENCES Events(id_event),
134+
FOREIGN KEY (id_client) REFERENCES Clients(id_client)
135+
);
136+
137+
CREATE TABLE Payments (
138+
id_payment VARCHAR(6) PRIMARY KEY,
139+
id_client VARCHAR(6),
140+
id_employee VARCHAR(6),
141+
amount DECIMAL(10,2) NOT NULL,
142+
currency VARCHAR(3) NOT NULL CHECK (
143+
currency IN ('EUR', 'USD', 'GBP')
144+
),
145+
payment_method VARCHAR(20) NOT NULL CHECK (
146+
payment_method IN ('card', 'transfer', 'cash')
147+
),
148+
payment_status VARCHAR(20) NOT NULL CHECK (
149+
payment_status IN ('pending', 'completed', 'canceled')
150+
),
151+
payment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
152+
FOREIGN KEY (id_client) REFERENCES Clients(id_client),
153+
FOREIGN KEY (id_employee) REFERENCES Employees(id_employee)
154+
);
155+
156+
CREATE TABLE Payment_Items (
157+
id_payment VARCHAR(6),
158+
id_product VARCHAR(6),
159+
quantity INTEGER NOT NULL CHECK (quantity > 0),
160+
unit_price DECIMAL(10,2) NOT NULL,
161+
PRIMARY KEY (id_payment, id_product),
162+
FOREIGN KEY (id_payment) REFERENCES Payments(id_payment),
163+
FOREIGN KEY (id_product) REFERENCES Products(id_product)
164+
);
165+
166+
CREATE TABLE Orders (
167+
id_order VARCHAR(6) PRIMARY KEY,
168+
id_supplier VARCHAR(6),
169+
id_employee VARCHAR(6),
170+
amount DECIMAL(10,2) NOT NULL,
171+
currency VARCHAR(3) NOT NULL CHECK (currency IN ('EUR', 'USD', 'GBP')),
172+
payment_method VARCHAR(20) NOT NULL CHECK (payment_method IN ('card', 'transfer', 'cash')),
173+
payment_status VARCHAR(20) NOT NULL CHECK (payment_status IN ('pending', 'completed', 'canceled')),
174+
order_status VARCHAR(20) NOT NULL CHECK (order_status IN ('pending', 'processing', 'shipped', 'delivered', 'canceled')),
175+
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
176+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
177+
FOREIGN KEY (id_supplier) REFERENCES Suppliers(id_supplier),
178+
FOREIGN KEY (id_employee) REFERENCES Employees(id_employee)
21179
);
22180

23-
CREATE TABLE Filme_Assistido (
24-
IDAssinatura INTEGER,
25-
NomeFilme TEXT,
26-
FOREIGN KEY (IDAssinatura) REFERENCES Assinatura(IDAssinatura)
181+
CREATE TABLE Order_Items (
182+
id_order VARCHAR(6),
183+
id_product VARCHAR(6),
184+
quantity INTEGER NOT NULL CHECK (quantity > 0),
185+
unit_value DECIMAL(10,2) NOT NULL,
186+
PRIMARY KEY (id_order, id_product),
187+
FOREIGN KEY (id_order) REFERENCES Orders(id_order),
188+
FOREIGN KEY (id_product) REFERENCES Products(id_product)
27189
);

0 commit comments

Comments
 (0)