forked from JonathanAPaes/Software-Product
-
Notifications
You must be signed in to change notification settings - Fork 0
/
db.sql
167 lines (141 loc) · 4.46 KB
/
db.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
-- Data Definition Language (DDL)
-- Create
-- CREATE USER 'PONTUAL_ADMIN'@'localhost' IDENTIFIED BY 'mudar123';
-- CREATE USER 'PONTUAL_ADMIN'@'%' IDENTIFIED BY 'mudar123';
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password';
CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';
FLUSH PRIVILEGES;
CREATE SCHEMA PONTUAL;
USE PONTUAL;
CREATE TABLE EMPRESAS (
ID INTEGER PRIMARY KEY AUTO_INCREMENT,
LOGIN VARCHAR(32),
SENHA VARCHAR(32),
NOME VARCHAR(60),
CNPJ_CPF VARCHAR(14),
CEP VARCHAR(10),
NUMERO INTEGER,
COMPLEMENTO VARCHAR(32),
ATIVO BOOLEAN
);
CREATE TABLE FUNCIONARIOS (
ID INTEGER PRIMARY KEY AUTO_INCREMENT,
ID_EMPRESA INTEGER,
LOGIN VARCHAR(32),
SENHA VARCHAR(32),
NOME VARCHAR(60),
CNPJ_CPF VARCHAR(14),
CEP VARCHAR(10),
NUMERO INTEGER,
ENTRADA TIME,
INTERVALO_SAIDA TIME,
INTERVALO_RETORNO TIME,
SAIDA TIME,
HOME_OFFICE BOOLEAN,
ENTRADA_FLEXIVEL BOOLEAN,
ALMOCO_FLEXIVEL BOOLEAN,
HORA_EXTRA BOOLEAN,
ESCALA_ESPECIAL BOOLEAN,
LOCAL_EXATO BOOLEAN,
DATA_CADASTRO DATETIME,
ATIVO BOOLEAN
);
CREATE TABLE EVENTOS (
ID INT AUTO_INCREMENT PRIMARY KEY,
NOME VARCHAR(32),
MENSAGEM VARCHAR(32),
HORARIO TIME,
ATIVO BOOLEAN
);
CREATE TABLE APONTAMENTOS (
ID INTEGER PRIMARY KEY AUTO_INCREMENT,
ID_EMPRESA INTEGER,
ID_FUNCIONARIO INTEGER,
ID_EVENTO INTEGER,
CONTADOR INTEGER,
DATA_APONTAMENTO DATE,
HORA_APONTAMENTO TIME,
LATITUDE DECIMAL(10, 6),
LONGITUDE DECIMAL(10, 6),
DESCRICAO VARCHAR(60),
USER_AGENT TEXT,
IP_ADDRESS VARCHAR(45)
);
-- Alter
ALTER TABLE FUNCIONARIOS
ADD CONSTRAINT fk_funcionarios_id_empresas
FOREIGN KEY (ID_EMPRESA)
REFERENCES EMPRESAS (ID);
ALTER TABLE APONTAMENTOS
ADD CONSTRAINT fk_apontamentos_id_empresas
FOREIGN KEY (ID_EMPRESA)
REFERENCES EMPRESAS (ID);
ALTER TABLE APONTAMENTOS
ADD CONSTRAINT fk_apontamentos_id_funcionarios
FOREIGN KEY (ID_FUNCIONARIO)
REFERENCES FUNCIONARIOS (ID);
-- Trigger
DELIMITER //
CREATE TRIGGER TRG_APONTAMENTOS_CONTADOR
BEFORE INSERT ON APONTAMENTOS
FOR EACH ROW
BEGIN
SET @max_contador = (SELECT MAX(CONTADOR) FROM APONTAMENTOS WHERE ID_FUNCIONARIO = NEW.ID_FUNCIONARIO AND ID_EVENTO = NEW.ID_EVENTO);
IF @max_contador IS NULL THEN
SET NEW.CONTADOR = 1;
ELSE
SET NEW.CONTADOR = @max_contador + 1;
END IF;
END;
//
DELIMITER ;
-- Index
CREATE UNIQUE INDEX IDX_APONTAMENTOS ON APONTAMENTOS (ID_EMPRESA, ID_FUNCIONARIO, CONTADOR);
-- Data Control Language (DCL)
-- Grant
GRANT ALL PRIVILEGES ON *.* TO 'PONTUAL_ADMIN'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'PONTUAL_ADMIN'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1'
GRANT ALL PRIVILEGES ON *.* TO 'root'@'::1'
-- GRANT ALL PRIVILEGES ON PONTUAL.* TO 'PONTUAL_ADMIN'@'localhost';
-- GRANT USAGE ON *.* TO 'PONTUAL_ADMIN'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON PONTUAL.EMPRESAS TO 'PONTUAL_ADMIN'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON PONTUAL.FUNCIONARIOS TO 'PONTUAL_ADMIN'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON PONTUAL.APONTAMENTOS TO 'PONTUAL_ADMIN'@'localhost';
FLUSH PRIVILEGES;
-- Data Manipulation Language (DML)
-- Insert
INSERT INTO EMPRESAS (LOGIN, SENHA, NOME, CNPJ_CPF, CEP, NUMERO, COMPLEMENTO, ATIVO)
VALUES
('[email protected]', 'qwerty123', 'Empresa - Debug', '12345678901', '12345', 1, 'Complement', TRUE),
('[email protected]', 'qwerty123', 'Empresa - Real', '98765432101', '54321', 2, 'Other', TRUE);
INSERT INTO FUNCIONARIOS (ID_EMPRESA, LOGIN, SENHA, NOME, ENTRADA, INTERVALO_SAIDA, INTERVALO_RETORNO, SAIDA, HORA_EXTRA, DATA_CADASTRO, ATIVO)
VALUES
(1,'[email protected]', '123qwerty', 'Funcionário - Debug', '08:00', '13:00', '14:00', '18:00', TRUE, NOW() , TRUE),
(2, '[email protected]', 'asdf456', 'Funcionário - Real', '08:00', '13:00', '14:00', '18:00', TRUE, NOW(), TRUE);
INSERT INTO EVENTOS (NOME, MENSAGEM, ATIVO)
VALUES
('Entrada', 'Bom dia', TRUE),
('Intervalo', 'Bom almoço', TRUE),
('Retorno Intervalo', 'Bom trabalho', TRUE),
('Saída', 'Até mais', TRUE);
-- Data Query Language (DQL)
-- Select
SELECT
E.NOME AS EMPRESA_NOME,
F.NOME AS FUNCIONARIO_NOME,
A.CONTADOR,
A.DATA_APONTAMENTO,
A.HORA_APONTAMENTO,
A.LATITUDE,
A.LONGITUDE,
A.DESCRICAO
FROM
APONTAMENTOS A
JOIN
EMPRESAS C ON A.ID_EMPRESA = C.ID
JOIN
FUNCIONARIOS F ON A.ID_FUNCIONARIO = F.ID
JOIN
EVENTOS E ON A.ID_EVENTO = E.ID;