Atributos:
Chamar à atenção para valores de atributos derivados, multi-valor, opcionais, e compostos. Exemplos possíveis:
Nota: nas entidades acima uso "superscript" em vez de "subscript" como aparece nos slides (o editor de "markdown" não suporta "subscript").
Seguir a notação exemplificada dos slides (p/ atr. chave, derivados, compostos, e multi-valor), resumida abaixo.
Possível solução:
Relacionamento | Restr. Cardinalidade | Restr. Participação | Restr. Estrutural |
---|---|---|---|
TRABALHA_EM(FUNCIONÁRIO, ESPAÇO) | N : 1 | total/total | (1,N) > (1,1) |
SUPERVISIONA(FUNCIONÁRIO, FUNCIONÁRIO) | 1 : N | parcial/parcial | (0,1) > (0,N) |
GERE(FUNCIONÁRIO, ESPAÇO) | 1 : 1 | parcial/total | (0,1) > (1,1) |
TEM_LUGAR(EVENTO, ESPAÇO, HoraInício, HoraFim) | M : N | total/parcial | (1,M) > (0,N) |
Seguir a notação exemplificada nos slides / resumo abaixo.
Relacionamentos binários R(A,B) devem apresentar-se da esquerda (A) para a direita (B) ou de cima (A) para baixo (B).
Para a primeira caracterização mais simples da entidade tipo PESSOA, temos a forma textual:
que é representada na forma visual pelo seguinte diagrama ER
Na segunda caracterização, com mais atributos, temos
e o diagrama ER
Relacionamento | Restr. Cardinalidade | Restr. Participação | Restr. Estrutural |
---|---|---|---|
SUPERVISIONA(FUNCIONÁRIO, FUNCIONÁRIO) | 1 : N | parcial > parcial | (0,1) > (0,N) |
TRABALHA_PARA(FUNCIONÁRIO,DEPARTAMENTO) | N : 1 | total > total | (1,N) > (1,1) |
GERE(FUNCIONÁRIO, DEPARTAMENTO) | 1 : 1 | parcial > total | (0,1) > (1,1) |
CONTROLA(DEPARTAMENTO, PROJECTO) | 1 : N | parcial > total | (0,1) > (1,N) |
DIRIGE(FUNCIONÁRIO, PROJECTO) | 1 : N | parcial > total | (0,1) > (1,N) |
TRABALHA_EM(FUNCIONÁRIO,PROJECTO, Horas) | M : N | parcial > parcial | (0,M) > (0,N) |
Chaves primárias:
Chaves externas:
Operação | Violação |
---|---|
INSERE FUNCIONÁRIO(ABCDEF, Roberto Pires, CP, 12345678,...) | Integridade de domínio para FUNCIONÁRIO.NumCC: ABCDEF não é um número. |
INSERE FUNCIONÁRIO(12345678, Roberto Pires, CP, 22444552,...) | Integridade de chave para FUNCIONÁRIO: 12345678 identifa um funcionário já existente (José Silva). |
INSERE FUNCIONÁRIO(23884312, Roberto Pires, CP, 12345679,...) | Integridade referencial: o supervisor com NumCC=12345679 não existe. |
INSERE ESPAÇO(NULL,Null All Night, ...) | Integridade de entidade: NULL não pode ser usado como valor para chave primária. |
REMOVE ESPAÇO(CP) | Integridade referencial: vários funcionários referem-se ao espaço com código CP. |
REMOVE FUNCIONÁRIO(12345678) | Integridade referencial: funcionário 12345678 (José Silva) é supervisor de 22444552 (Roberta Rodrigues) |
REMOVE FUNCIONÁRIO(18923444) | Integridade referencial: funcionário 18923444 (Fátima Lopes) é gestor do espaço MH e supervisor de 10345553 (Roberta Rodrigues) |
ACTUALIZA FUNCIONÁRIO(22444552, Espaço → XPTO) | Integridade referencial: espaço com código XPTO não existe. |
ACTUALIZA ESPAÇO(CP,Nome → NULL) | Integridade de domínio: Nome não é um atributo opcional (relembrar isso dos requisitos). |
ACTUALIZA ESPAÇO(MH,Gestor → 12345679) | Integridade referencial: funcionário 12345679 não existe. |
Nota: Neste resolução utiliza-se a notação vertical (abaixo exemplo dos slides).
Tabelas para o modelo ER dado com chaves primárias e externas (→):
FUNCIONÁRIO |
---|
NumCC |
Espaço → ESPAÇO.CodEspaço |
Supervisor → FUNCIONÁRIO.NumCC |
Nome |
DataNasc |
Cargo |
NUM_TELEFONE |
---|
Funcionário → FUNCIONÁRIO.NumCC |
Num |
ESPAÇO |
---|
CodEspaço |
Gestor → FUNCIONÁRIO.NumCC |
Nome |
MRua |
MNum |
MAndar |
MCP |
MLocalidade |
EVENTO |
---|
CodEvento |
Nome |
DataInício |
DataFim |
ALOCAÇÃO |
---|
Espaço → ESPAÇO.CodEspaço |
Evento → EVENTO.CodEvento |
HoraInício |
HoraFim |
Notação ER
Nova entidade-tipo (fraca)
Mudanças aos relacionamentos:
SALA |
---|
CodSala |
Espaço → ESPAÇO.CodEspaço |
Descrição |
ALOCAÇÃO |
---|
Sala → SALA.CodSala |
Espaço → SALA.Espaço |
Evento → EVENTO.CodEvento |
HoraInício |
HoraFim |