Esquema de banco de dados e mapeamento OO-Relacional

    projbaixo.gif (9424 bytes)

Referências

Resumo da seção

Implementação da identidade de objetos

Implementação de domains

CREATE TABLE Pessoa (
    EstadoCivil CHARACTER(1) NULL CHECK (EstadoCivil IN ('S', 'C', 'D', 'V'))
    ...
)
CREATE TABLE xxx (
    Vermelho CHARACTER(1) NULL
    Azul CHARACTER(1) NULL
    Amarelo CHARACTER(1) NULL
    ...
)
CREATE TABLE TipoEstadoCivil (
    Valor CHAR(1) PRIMARY KEY,
    DisplayString VARCHAR2(50) NOT NULL,
    Descricao VARCHAR2(2000));
INSERT INTO TipoEstadoCivil (Valor, DisplayString)
VALUES ('S', 'Solteiro');
INSERT INTO TipoEstadoCivil (Valor, DisplayString)
VALUES ('C', 'Casado');
INSERT INTO TipoEstadoCivil (Valor, DisplayString)
VALUES ('D', 'Divorciado');
INSERT INTO TipoEstadoCivil (Valor, DisplayString)
VALUES ('V', 'Viuvo');
)
CREATE TABLE Pessoa (
    EstadoCivil CHARACTER(1) NOT NULL DEFAULT 'U'
        REFERENCES TipoEstadoCivil(Valor),
    ...
)

Implementação de classes

Implementação de operações

Implementação de associações simples

Associações 1-para-1

Associações 0..1-para-1

Associações 1-para-muitos

um-para-muitos.gif (4689 bytes)

um-para-muitos-tabela.gif (6435 bytes)

Associações muitos-para-muitos

muitos-para-muitos-tabela.gif (5583 bytes)

Implementação de associações avançadas

Associação qualificada

assoc-qualificada.gif (7052 bytes)

Classe de associação

classe-assoc.gif (8704 bytes)

Associação ordenada

Associação ternária

assoc-ternaria.gif (3713 bytes)

Agregações

Implementação de herança simples (generalização)

heranca.gif (9087 bytes)

CREATE VIEW view_PagamentoCC AS
    SELECT pagamentoID, valor, tipoCC, numeroCC
    FROM Pagamento AS P JOIN PagamentoCC as CC
        ON P.pagamentoID = CC.pagamentoCCID

eliminacao.gif (7716 bytes)

parabaixo.gif (8609 bytes)

paracima.gif (4516 bytes)

hibrida.gif (9707 bytes)

Implementação de herança múltipla

Resumo dos passos para o mapeamento OO-Relacional

  1. Cada classe UML é mapeada para uma tabela
  2. Cada atributo da clase é uma coluna da tabela
  3. O tipo do atributo é mapeado para um tipo da coluna, de acordo com regras de transformação de tipos
  4. Se o atributo tem o tag UML {nullable}, a coluna tem constraint NULL; caso contrário, tem constraint NOT NULL
  5. Se o atributo UML tem um inicializador, adicionar a cláusula DEFAULT à coluna
  6. Para cada classe sem generalização (é raiz de hierarquia ou não participa de hierarquia) e com identidade baseada na existência, criar uma chave primária inteira; com identidade baseada em valor, adicionar as colunas com tag UML {OID} ao constraint PRIMARY KEY
  7. Para subclasses com uma única superclasse com chave primária de uma coluna, adicionar a chave da superclasse ao constraint PRIMARY KEY e adicionar uma cláusula REFERENCES para relacionar a coluna (chave estrangeira) à chave primária da superclasse
  8. Para subclasses com uma única superclasse com chave primária de várias colunas, use constraints de tabela PRIMARY KEY e FOREIGN KEY em vez do constraint de coluna do item anterior
  9. Para herança múltipla, adicione uma coluna na subclasse para cada chave primária de cada superclasse; adicione um constraint de tabela FOREIGN KEY com todas essas colunas (que referenciam chaves primárias das superclasses)
  10. Para classes de associação, adicione uma coluna para a chave primária de cada classe participando da associação; use um constraint FOREIGN KEY
  11. Para tags UML {alternate OID}, adicione as colunas envolvidas ao constraint UNIQUE
  12. Adicione CHECK para cada constraint explícito
  13. Crie tabelas para as associações que não usam chaves estrangeiras embutidas (muitos-para-muitos, ternárias, ...), e use constraint de tabela FOREIGN KEY
  14. Para agregações, use a opção ON DELETE CASCADE, ON UPDATE CASCADE na tabela agregadora

proj1-9 programa anterior