Exemplo Hospitalar Exemplo: BD para uma realidade hospitalar Médicos Consultas Med_Amb Pacientes Ambulatórios
a) Esquema Conceitual Criação de uma tabela Create table nome_tabela ( nome_atributo 1 domínio 1, ... ... nome_atributo n domínio n, [ constraint nome_ri primary key (lista_atributos), ] [constraint nome_ri foreign key (nome_atributo) references nome_tabela] ); Serão especificadas tantas chaves estrangeiras (foreign key) quantos forem os atributos que expressam relacionamentos entre tabelas.
CRIAÇÃO DAS TABELAS Ambulatórios [ nroa, andar, capacidade ] Pacientes [ codp, nomep, idade, cidade , problema ] Médicos [codm, nomem, idade, especialidade, salario,nroa ] Consultas [ codm, codp, data_hora ]
Linguagem de Definição de Dados create table ambulatorios ( nroa integer, andar integer, capacidade integer, constraint a1 primary key(nroa) ); create table pacientes ( codp integer, nomep varchar(20), idade integer, cidade varchar(20), problema varchar(20), constraint p1 primary key(codp));
Linguagem de Definição de Dados create table medicos ( codm integer, nomem text, idade integer, especialidade text, salario money, nroa integer , constraint m1 primary key(codm) , constraint ce1 foreign key(nroa) references ambulatorios );
create table consultas ( codm integer, codp integer, data_hora date time, constraint c1 primary key(codm,codp,data_hora), constraint ce2 foreign key(codm) references medicos, constraint ce3 foreign key(codp) references pacientes );
b) Esquemas Externos Visão: relação virtual derivada a partir das relações presentes no BD (transparente para a aplicação) Exemplo de visão: O setor de tratamento de câncer do Hospital lida apenas com dados de pacientes que têm esta doença Criação de uma visão Create View nome_visão (lista de atributos) as Select lista de atributos from nome_relação e/ou visão [ where qualificação] ;
Linguagem de Definição de Dados Esquema Externo 1 Criação de uma Visão (SQL): Create View PacCâncer (código, paciente, idade) as Select codp, nomep, idade from Pacientes where problema = ‘Câncer’;
Definições recursivas Create View PacCanJovens as Select * From PacCâncer Where idade < 21; Nível Externo Nível Conceitual Select * Select codp, nomep, idade from PacCâncer from Pacientes where paciente like ‘J%’; where problema = ‘câncer’ and nomep like ‘J%’;
LMD: Update PacCâncer Update Pacientes set idade = idade + 1 set idade = idade + 1 where código = 1; where problema = ‘câncer’ and codp = 1;
Esquema Externo 2 Create View DescontosMed (código, nome, desconto) as Select codm, nomem, salário * 0.15 + 80 from Médicos;
Esquema Externo 3 Create View ConsultasMP (códigoMédico, especialidade, códigoPaciente, data) as Select médicos.codm, especialidade, codp, data_hora from Médicos, Consultas where Médicos.codm = Consultas.codm;
Esquema Externo 4 Create View DadosMed as Select codm, nome, especialidade from Médicos; Create View Horários as Select codm,data_hora from Consultas;
Ambulatório nroa andar capacidade 1 1 30 2 1 50 3 2 40 4 2 25 5 2 50
Pacientes 1 Ana 20 Fpolis gripe 2 Paulo 24 Palhoça fratura codp nomep idade cidade problema 1 Ana 20 Fpolis gripe 2 Paulo 24 Palhoça fratura 3 Lúcia 30 Fpolis tendinite 4 Mário 22 Blumenau sarampo 5 Raul 19 Blumenau câncer
Consultas codm codp data hora 1 1 12/10/04 14:00 1 4 13/10/04 10:00 2 1 13/10/04 9:00 2 2 13/10/04 11:00 2 3 14/10/04 14:00 2 4 14/10/04 17:00 3 3 12/10/04 10:00 3 4 15/10/04 13:00 4 4 16/10/04 13:00
Médicos codm nomem idade especialidade nroa salario 1 João 20 ortopedia 1 1000,00 2 Maria 20 traumatologia 2 2000,00 3 Pedro 25 pediatria 2 500,00 4 Carlos 28 ortopedia 1500,00
Visão Externa 1- PacCâncer codigo paciente idade 5 Raul 19 Visão Externa 2- DescontosMed codigo nomem desconto 1 João 230 2 Maria 380 3 Pedro 155 4 Carlos 305
Visão Externa 4 DadosMed codm nomem especialidade 1 João ortopedia 2 Maria traumatologia 3 Pedro pediatria 4 Carlos ortopedia