Advertisement
Manioc

roteiro 3

Apr 10th, 2019
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DROP OWNED BY CURRENT_USER;
  2.  
  3. CREATE TYPE estados AS ENUM('PB', 'CE', 'PI', 'AL', 'MA', 'RN', 'BA', 'PE', 'SE');
  4. CREATE TYPE cargos AS ENUM ('farmaceuticos', 'vendedores', 'entregadores', 'caixas', 'administradores');
  5. CREATE TYPE tipo_endereco AS ENUM('residencia', 'trabalho', 'outro');
  6.  
  7. CREATE TABLE farmacias (                                              
  8.     id SERIAL PRIMARY KEY,
  9.     sede CHAR(1),
  10.     bairro TEXT,
  11.     cidade TEXT,
  12.     estado estados
  13. );
  14.  
  15. CREATE TABLE funcionarios (                                          
  16.     id SERIAL,
  17.     nome TEXT,
  18.     gerente CHAR(1),
  19.     cargo cargos,
  20.     f_id INTEGER,
  21.     PRIMARY KEY (id, cargo)
  22. );
  23.  
  24. CREATE TABLE clientes (
  25.     cpf CHAR(11) PRIMARY KEY,
  26.     idade date,
  27.     CHECK( age(now(), idade) > '18 years'::interval)
  28. );
  29.  
  30. CREATE TABLE enderecos (
  31.     id SERIAL PRIMARY KEY,
  32.     cep CHAR(8),
  33.     cliente CHAR(11),
  34.     tipo tipo_endereco
  35. );
  36. CREATE TABLE medicamentos (
  37.     id SERIAL PRIMARY KEY,
  38.     exclusividade CHAR(1),
  39.     PRIMARY KEY (id, exclusividade)
  40. );
  41.  
  42. CREATE TABLE entregas (
  43.     id SERIAL PRIMARY KEY,
  44.     endereco INTEGER NOT NULL,
  45.     produto INTEGER NOT NULL
  46. );
  47.  
  48. CREATE TABLE vendas (
  49.     id INTEGER,
  50.     comprador CHAR(11),
  51.     medicamento INTEGER,
  52.     vendedor INTEGER
  53. );
  54.  
  55. ALTER TABLE farmacias ALTER COLUMN sede SET DEFAULT 'F';
  56. ALTER TABLE funcionarios ADD CONSTRAINT farmacias FOREIGN KEY (f_id) REFERENCES farmacias(id);
  57. ALTER TABLE entregas ADD CONSTRAINT destino FOREIGN KEY (endereco) REFERENCES enderecos(id);
  58. ALTER TABLE enderecos ADD CONSTRAINT residente FOREIGN KEY (cliente) REFERENCES clientes(cpf);
  59. ALTER TABLE vendas ADD CONSTRAINT cliente_compra FOREIGN KEY (comprador) REFERENCES clientes(cpf) ON DELETE RESTRICT;
  60. ALTER TABLE vendas ADD CONSTRAINT produto FOREIGN KEY (medicamento) REFERENCES medicamentos(id) ON DELETE RESTRICT;
  61. ALTER TABLE vendas ADD CONSTRAINT intermediador FOREIGN KEY (vendedor) REFERENCES funcionarios(id);
  62.  
  63. ALTER TABLE funcionarios ADD CONSTRAINT unico_gerente EXCLUDE USING gist(f_id WITH =, id WITH <>) WHERE (gerente='T');
  64. ALTER TABLE farmacias ADD CONSTRAINT unica_farmacia_bairro EXCLUDE USING gist(bairro WITH =);
  65. ALTER TABLE farmacias ADD CONSTRAINT unica_sede EXCLUDE USING gist(sede WITH =) WHERE (sede='T');
  66.  
  67. ALTER TABLE farmacias ADD CONSTRAINT ck_bool CHECK(sede='T' OR sede='F');
  68. ALTER TABLE funcionarios ADD CONSTRAINT ck_bool CHECK(gerente='T' OR gerente='F');
  69. ALTER TABLE medicamentos ADD CONSTRAINT ck_bool CHECK(exclusividade='T' OR exclusividade='F');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement