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