Exemplo Hospitalar Exemplo: BD para uma realidade hospitalar Médicos Med_Amb Ambulatórios Consultas Pacientes 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 Select * from PacCâncer where paciente like ‘J%’; Nível Conceitual Select codp, nomep, idade from Pacientes where problema = ‘câncer’ and nomep like ‘J%’; LMD: Update PacCâncer set idade = idade + 1 where código = 1; Update Pacientes set idade = idade + 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 1 2 3 4 5 andar 1 1 2 2 2 capacidade 30 50 40 25 50 Pacientes codp nomep idade cidade problema 1 2 3 4 5 Ana Paulo Lúcia Mário Raul gripe fratura tendinite sarampo câncer 20 24 30 22 19 Fpolis Palhoça Fpolis Blumenau Blumenau Consultas codm 1 1 2 2 2 2 3 3 4 codp 1 4 1 2 3 4 3 4 4 data 12/10/04 13/10/04 13/10/04 13/10/04 14/10/04 14/10/04 12/10/04 15/10/04 16/10/04 hora 14:00 10:00 9:00 11:00 14:00 17:00 10:00 13:00 13:00 Médicos codm nomem idade 1 João 20 2 Maria 20 3 Pedro 25 4 Carlos 28 especialidade ortopedia traumatologia pediatria ortopedia nroa 1 2 2 salario 1000,00 2000,00 500,00 1500,00 Visão Externa 1- PacCâncer codigo paciente 5 Raul idade 19 Visão Externa 2- DescontosMed codigo 1 2 3 4 nomem João Maria Pedro Carlos desconto 230 380 155 305 Visão Externa 4 DadosMed codm 1 2 3 4 nomem João Maria Pedro Carlos especialidade ortopedia traumatologia pediatria ortopedia