Skip to content

Commit def7095

Browse files
committed
Update create_tables.sql
1 parent 6a99be9 commit def7095

File tree

1 file changed

+20
-182
lines changed

1 file changed

+20
-182
lines changed

data/create_tables.sql

Lines changed: 20 additions & 182 deletions
Original file line numberDiff line numberDiff line change
@@ -1,189 +1,27 @@
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
28-
);
29-
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
42-
);
43-
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)
1+
CREATE TABLE Cliente (
2+
IDCliente INTEGER PRIMARY KEY,
3+
NomeCliente TEXT,
4+
EmailCliente TEXT,
5+
Cidade TEXT
1546
);
1557

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)
8+
CREATE TABLE Plano (
9+
Plano TEXT PRIMARY KEY,
10+
PrecoMensal DECIMAL
16411
);
16512

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)
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)
17921
);
18022

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)
23+
CREATE TABLE Filme_Assistido (
24+
IDAssinatura INTEGER,
25+
NomeFilme TEXT,
26+
FOREIGN KEY (IDAssinatura) REFERENCES Assinatura(IDAssinatura)
18927
);

0 commit comments

Comments
 (0)