1) O documento descreve um sistema para emissão de laudos médicos à distância por meio de uma cooperativa, com tabelas para cadastro de usuários, estabelecimentos de saúde, exames, procedimentos e laudos.
2) É apresentado um script SQL para criação do banco de dados do sistema, com tabelas e relacionamentos necessários.
Projeto Banco de Dados emissão de laudos de exames à distância, na forma de uma cooperativa
1. OBJETO: emissão de laudos de exames à distância, na forma de uma cooperativa
- acessado por um conjunto de usuários, não necessariamente profissionais de saúde;
- Usuário: acesso de qualquer parte do mundo [país, a divisão política dentro do país
(estado, província) e a cidade na qual o usuário reside], nome, endereço e informações de
contato (cada usuário poderá ter n contatos diferentes, de diferentes tipos – tais como
endereços de e-mail, telefones, entre outros).
- cada usuário poderá estar relacionado com n estabelecimentos de saúde;
- cada estabelecimento de saúde possui um nome de registro, um nome fantasia, um
número de registro e um endereço (incluindo país, divisão política e cidade), além de
informações de contato;
- todo profissional de saúde registrado no sistema é, obrigatoriamente, um usuário do
mesmo [como forma de complemento de cadastro, um profissional de saúde possui um
número de registro profissional e uma ou mais especialidades médicas relacionadas (como
por exemplo, cardiologia e neurologia)].
- um profissional de saúde está liberado para visualizar e manter dados de um ou mais
estabelecimentos de saúde, desde que seu cadastro especifique essa liberação.
- quando um exame ou procedimento é realizado por um dos estabelecimentos de saúde
participantes, dados como a data, o paciente, o tipo de exame executado
(eletrocardiograma, tomografia computadorizada, entre outros) e observações são
persistidas no BD para avaliação posterior;
- pelo fato de o mesmo paciente poder executar diferentes exames durante a sua vida, é
necessário manter seus dados cadastrais atualizados (incluindo o nome, o sexo, o
endereço completo e os seus dados de contato);
- exames executados poderão ser laudados pelos profissionais de saúde registrados no
sistema;
- cada exame poderá ter até dois laudos vinculados (chamados respectivamente de
primeira e segunda opinião);
- um laudo é composto por uma data e por uma observação, onde são registrados os
achados e as orientações de tratamento (se for o caso).
- diferentes tipos de exame possuem valores diferentes para a execução dos exames e
para a redação dos laudos. Esses valores compõem uma tabela de preços que possui
uma vigência (com datas inicial e final de validade);
- uma segunda opinião dada a respeito de um exame é cobrada da mesma forma que uma
primeira opinião”.
Requisitos:
- o esquema de BD deve incluir as tabelas de domínio necessárias para contemplar os
dados acessórios a serem utilizados pelo sistema (como por exemplo: especialidades
médicas, tipos de contato, dentre outras);
- as chaves primárias das tabelas, quando não puderem ser selecionadas a partir de
chaves naturais, deverão ser criadas como chaves substitutas de autoincremento.
Resolução:
1) MER
2. 2) SCRIPT
-- -----------------------------------------------------
-- Schema cadastroBD
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS cadastroBD DEFAULT CHARACTER SET utf8 ;
USE cadastroBD ;
-- -----------------------------------------------------
-- Table cadastroBD.Pais
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Pais (
idPais INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(45) NULL,
PRIMARY KEY (idPais))
ENGINE = InnoDB;
3. -- -----------------------------------------------------
-- Table cadastroBD.Estao_Provincia
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Estao_Provincia (
idEstao_Provincia INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(45) NULL,
idPais INT NOT NULL,
PRIMARY KEY (idEstao_Provincia),
INDEX fk_Estao_Provincia_Pais_idx (idPais ASC) ,
CONSTRAINT fk_Estao_Provincia_Pais
FOREIGN KEY (idPais)
REFERENCES cadastroBD.Pais (idPais)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Cidade
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Cidade (
idCidade INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(45) NULL,
idEstao_Provincia INT NOT NULL,
PRIMARY KEY (idCidade),
INDEX fk_Cidade_Estao_Provincia1_idx (idEstao_Provincia ASC) ,
CONSTRAINT fk_Cidade_Estao_Provincia1
FOREIGN KEY (idEstao_Provincia)
REFERENCES cadastroBD.Estao_Provincia (idEstao_Provincia)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Usuario
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Usuario (
idUsuario INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(45) NULL,
senha VARCHAR(45) NULL,
login VARCHAR(45) NULL,
status TINYINT NULL,
endereco TEXT NULL,
rg VARCHAR(15) NULL,
cpf VARCHAR(15) NULL,
4. idCidade INT NOT NULL,
PRIMARY KEY (idUsuario),
INDEX fk_Usuario_Cidade1_idx (idCidade ASC) ,
CONSTRAINT fk_Usuario_Cidade1
FOREIGN KEY (idCidade)
REFERENCES cadastroBD.Cidade (idCidade)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Estabelecimento_Saude
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Estabelecimento_Saude (
idEstabelecimento_Saude INT NOT NULL AUTO_INCREMENT,
nomeRegistro VARCHAR(45) NULL,
endereco VARCHAR(45) NULL,
cnpj VARCHAR(45) NULL,
Cidade_idCidade INT NOT NULL,
nome_fantasia VARCHAR(45) NULL,
PRIMARY KEY (idEstabelecimento_Saude),
INDEX fk_Estabelecimento_Saude_Cidade1_idx (Cidade_idCidade ASC) ,
CONSTRAINT fk_Estabelecimento_Saude_Cidade1
FOREIGN KEY (Cidade_idCidade)
REFERENCES cadastroBD.Cidade (idCidade)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Tipo_Exame
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Tipo_Exame (
idTipo_Exame INT NOT NULL,
nome VARCHAR(45) NULL,
PRIMARY KEY (idTipo_Exame))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Preco_exame
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Preco_exame (
idPreco_exame INT NOT NULL,
valor DOUBLE NULL,
data_inicio DATE NULL,
5. data_fim DATE NULL,
obs TEXT NULL,
PRIMARY KEY (idPreco_exame))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Paciente
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Paciente (
idPaciente INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(45) NULL,
endereco VARCHAR(45) NULL,
cpf VARCHAR(45) NULL,
rg VARCHAR(45) NULL,
sexo VARCHAR(20) NULL,
idUsuario INT NOT NULL,
INDEX fk_Paciente_Usuario1_idx (idUsuario ASC) ,
PRIMARY KEY (idPaciente),
CONSTRAINT fk_Paciente_Usuario1
FOREIGN KEY (idUsuario)
REFERENCES cadastroBD.Usuario (idUsuario)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Exame
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Exame (
idExame INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(45) NULL,
valor DOUBLE NULL,
data DATE NULL,
idEstabelecimento_Saude INT NOT NULL,
idTipo_Exame INT NOT NULL,
observacoes TEXT NULL,
idPreco_exame INT NOT NULL,
idPaciente INT NOT NULL,
PRIMARY KEY (idExame),
INDEX fk_Exame_Estabelecimento_Saude1_idx (idEstabelecimento_Saude ASC) ,
INDEX fk_Exame_Tipo_Exame1_idx (idTipo_Exame ASC) ,
INDEX fk_Exame_Preco_exame1_idx (idPreco_exame ASC) ,
INDEX fk_Exame_Paciente1_idx (idPaciente ASC) ,
CONSTRAINT fk_Exame_Estabelecimento_Saude1
FOREIGN KEY (idEstabelecimento_Saude)
REFERENCES cadastroBD.Estabelecimento_Saude (idEstabelecimento_Saude)
6. ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Exame_Tipo_Exame1
FOREIGN KEY (idTipo_Exame)
REFERENCES cadastroBD.Tipo_Exame (idTipo_Exame)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Exame_Preco_exame1
FOREIGN KEY (idPreco_exame)
REFERENCES cadastroBD.Preco_exame (idPreco_exame)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Exame_Paciente1
FOREIGN KEY (idPaciente)
REFERENCES cadastroBD.Paciente (idPaciente)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Tipo_Procedimento
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Tipo_Procedimento (
idTipo_Procedimento INT NOT NULL AUTO_INCREMENT,
nome VARCHAR(45) NULL,
PRIMARY KEY (idTipo_Procedimento))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Procedimento
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Procedimento (
idProcedimento INT NOT NULL,
nome VARCHAR(45) NULL,
data DATE NULL,
valor DOUBLE NULL,
idEstabelecimento_Saude INT NOT NULL,
idTipo_Procedimento INT NOT NULL,
Procedimentocol TEXT NULL,
idPaciente INT NOT NULL,
PRIMARY KEY (idProcedimento),
INDEX fk_Procedimento_Estabelecimento_Saude1_idx (idEstabelecimento_Saude
ASC) ,
INDEX fk_Procedimento_Tipo_Procedimento1_idx (idTipo_Procedimento ASC) ,
INDEX fk_Procedimento_Paciente1_idx (idPaciente ASC) ,
CONSTRAINT fk_Procedimento_Estabelecimento_Saude1
7. FOREIGN KEY (idEstabelecimento_Saude)
REFERENCES cadastroBD.Estabelecimento_Saude (idEstabelecimento_Saude)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Procedimento_Tipo_Procedimento1
FOREIGN KEY (idTipo_Procedimento)
REFERENCES cadastroBD.Tipo_Procedimento (idTipo_Procedimento)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Procedimento_Paciente1
FOREIGN KEY (idPaciente)
REFERENCES cadastroBD.Paciente (idPaciente)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Profissional_Saude
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Profissional_Saude (
idProfissional_Saude INT NOT NULL AUTO_INCREMENT,
numero_registro INT NULL,
nome VARCHAR(45) NULL,
sexo VARCHAR(45) NULL,
endereco VARCHAR(100) NULL,
cpf VARCHAR(15) NULL,
rg VARCHAR(15) NULL,
data_nascimento DATE NULL,
idUsuario INT NOT NULL,
PRIMARY KEY (idProfissional_Saude),
INDEX fk_Profissional_Saude_Usuario1_idx (idUsuario ASC) ,
CONSTRAINT fk_Profissional_Saude_Usuario1
FOREIGN KEY (idUsuario)
REFERENCES cadastroBD.Usuario (idUsuario)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Laudo
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Laudo (
idLaudo INT NOT NULL AUTO_INCREMENT,
primeiro_opiniao TEXT NULL,
segunda_opiniao VARCHAR(45) NULL,
data DATE NULL,
8. orientacao TEXT NULL,
idExame INT NOT NULL,
idProcedimento INT NOT NULL,
idProfissional_Saude INT NOT NULL,
PRIMARY KEY (idLaudo, idProcedimento, idProfissional_Saude),
INDEX fk_Laudo_Exame1_idx (idExame ASC) ,
INDEX fk_Laudo_Procedimento1_idx (idProcedimento ASC) ,
INDEX fk_Laudo_Profissional_Saude1_idx (idProfissional_Saude ASC) ,
CONSTRAINT fk_Laudo_Exame1
FOREIGN KEY (idExame)
REFERENCES cadastroBD.Exame (idExame)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Laudo_Procedimento1
FOREIGN KEY (idProcedimento)
REFERENCES cadastroBD.Procedimento (idProcedimento)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Laudo_Profissional_Saude1
FOREIGN KEY (idProfissional_Saude)
REFERENCES cadastroBD.Profissional_Saude (idProfissional_Saude)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Tipo_Contato
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Tipo_Contato (
idTipo_Contato INT NOT NULL AUTO_INCREMENT,
Tipo VARCHAR(45) NULL,
PRIMARY KEY (idTipo_Contato))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Contato
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Contato (
idContato INT NOT NULL AUTO_INCREMENT,
descricao VARCHAR(45) NULL,
obs VARCHAR(45) NULL,
idTipo_Contato INT NOT NULL,
PRIMARY KEY (idContato),
INDEX fk_Contato_Tipo_Contato1_idx (idTipo_Contato ASC) ,
CONSTRAINT fk_Contato_Tipo_Contato1
FOREIGN KEY (idTipo_Contato)
9. REFERENCES cadastroBD.Tipo_Contato (idTipo_Contato)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Especialidade_medica
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Especialidade_medica (
idEspecialidade_medica INT NOT NULL AUTO_INCREMENT,
tipo VARCHAR(100) NULL,
obs TEXT NULL,
PRIMARY KEY (idEspecialidade_medica))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Usuario_has_Estabelecimento_Saude
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Usuario_has_Estabelecimento_Saude (
idUsuario INT NOT NULL,
idEstabelecimento_Saude INT NOT NULL,
PRIMARY KEY (idUsuario, idEstabelecimento_Saude),
INDEX fk_Usuario_has_Estabelecimento_Saude_Estabelecimento_Saude1_idx
(idEstabelecimento_Saude ASC) ,
INDEX fk_Usuario_has_Estabelecimento_Saude_Usuario1_idx (idUsuario ASC) ,
CONSTRAINT fk_Usuario_has_Estabelecimento_Saude_Usuario1
FOREIGN KEY (idUsuario)
REFERENCES cadastroBD.Usuario (idUsuario)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Usuario_has_Estabelecimento_Saude_Estabelecimento_Saude1
FOREIGN KEY (idEstabelecimento_Saude)
REFERENCES cadastroBD.Estabelecimento_Saude (idEstabelecimento_Saude)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Usuario_has_Contato
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Usuario_has_Contato (
Usuario_idUsuario INT NOT NULL,
Contato_idContato INT NOT NULL,
PRIMARY KEY (Usuario_idUsuario, Contato_idContato),
INDEX fk_Usuario_has_Contato_Contato1_idx (Contato_idContato ASC) ,
10. INDEX fk_Usuario_has_Contato_Usuario1_idx (Usuario_idUsuario ASC) ,
CONSTRAINT fk_Usuario_has_Contato_Usuario1
FOREIGN KEY (Usuario_idUsuario)
REFERENCES cadastroBD.Usuario (idUsuario)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Usuario_has_Contato_Contato1
FOREIGN KEY (Contato_idContato)
REFERENCES cadastroBD.Contato (idContato)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Contato_has_Estabelecimento_Saude
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS cadastroBD.Contato_has_Estabelecimento_Saude (
idContato INT NOT NULL,
idEstabelecimento_Saude INT NOT NULL,
PRIMARY KEY (idContato, idEstabelecimento_Saude),
INDEX fk_Contato_has_Estabelecimento_Saude_Estabelecimento_Saude1_idx
(idEstabelecimento_Saude ASC) ,
INDEX fk_Contato_has_Estabelecimento_Saude_Contato1_idx (idContato ASC) ,
CONSTRAINT fk_Contato_has_Estabelecimento_Saude_Contato1
FOREIGN KEY (idContato)
REFERENCES cadastroBD.Contato (idContato)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Contato_has_Estabelecimento_Saude_Estabelecimento_Saude1
FOREIGN KEY (idEstabelecimento_Saude)
REFERENCES cadastroBD.Estabelecimento_Saude (idEstabelecimento_Saude)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table cadastroBD.Profissional_Saude_has_Especialidade_medica
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS
cadastroBD.Profissional_Saude_has_Especialidade_medica (
idProfissional_Saude INT NOT NULL,
idEspecialidade_medica INT NOT NULL,
PRIMARY KEY (idProfissional_Saude, idEspecialidade_medica),
INDEX fk_Profissional_Saude_has_Especialidade_medica_Especialidad_idx
(idEspecialidade_medica ASC) ,
11. INDEX fk_Profissional_Saude_has_Especialidade_medica_Profissional_idx
(idProfissional_Saude ASC) ,
CONSTRAINT fk_Profissional_Saude_has_Especialidade_medica_Profissional_S1
FOREIGN KEY (idProfissional_Saude)
REFERENCES cadastroBD.Profissional_Saude (idProfissional_Saude)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT fk_Profissional_Saude_has_Especialidade_medica_Especialidade_1
FOREIGN KEY (idEspecialidade_medica)
REFERENCES cadastroBD.Especialidade_medica (idEspecialidade_medica)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;