Diretrizes:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Nome da Coluna | Tipo de Dado |
| ID_do_Cliente | Number |
| Nome | Varchar |
| Rua | Varchar |
| Cidade | Varchar |
| Estado/Província | Char(2) |
| CEP | Varchar |
| País | Varchar |
Definição da tabela Clientes
A partir desse pronto, criamos a classe Clientes, com a estrutura mostrada na figura a seguir:

Classe Clientes inicial
Nessa classe Clientes inicial há um atributo para cada coluna da tabela Clientes. Cada atributo possui visibilidade pública já que qualquer uma das colunas da tabela de origem pode ser consultada.
Observe que, o ícone
, listado à esquerda do atributo, indica que o atributo é 'público'. Por padrão, todos os atributos derivados das tabelas RDBMS devem ser públicos, pois o RDBMS geralmente permite que qualquer coluna seja consultada sem restrição.
Geralmente, a classe que resulta do mapeamento direto das classes de tabela contém atributos que podem ser separados em uma outra classe, principalmente nos casos em que os atributos aparecerem em várias classes convertidas. Esses 'atributos repetidos' podem resultar de uma anormalidade das tabelas, por motivos de desempenho, ou de um modelo de dados muito simplificado. Nesses casos, divida a classe correspondente em duas ou mais classes para representar uma visão normalizada das tabelas.
Exemplo
Entretanto, quase que imediatamente após definir a classe Clientes acima, é possível definir uma classe Endereçoscontendo todas as informações de endereço (considerando que haverá outros endereços no sistema), resultando nas seguintes classes:

classe Clientes revisada, com a classe Endereços extraída
A associação dessas duas classes resulta em uma agregação já que o endereço do cliente pode ser considerado como parte do cliente.
Para cada relacionamento de chave estrangeira da tabela, crie uma associação entre as classes associadas, removendo o atributo da classe mapeada para a coluna de chave estrangeira. Se a coluna de chave estrangeira tiver sido representada inicialmente como um atributo, remova-a da classe.
Exemplo
Considere a estrutura a seguir para a tabela Pedidos:
| Nome da Coluna | Tipo de Dado |
| Número | Number |
| ID_do_Cliente | Varchar |
Estrutura da tabela Pedidos
Na tabela Pedidos listada acima, a coluna ID_do_Cliente é uma referência de chave estrangeira; essa coluna contém o valor da chave primária da classe Clientes associada à classe Pedidos. Essa representação é mostrada a seguir no Modelo de Design:

Representação dos relacionamentos de chave estrangeira no modelo de design
A chave estrangeira é representada como uma associação entre as classes Pedidos e Itens.
Os modelos de dados RDBMS representam relacionamentos muitos-para-muitos que chamaram a tabela de junção ou a tabela de associação. Essas tabelas permitem que esses relacionamentos sejam representados através de uma tabela intermediária, contendo as chaves primárias de duas tabelas diferentes que podem ser associadas. As tabelas de junção são necessárias porque uma referência de chave estrangeira pode conter apenas uma referência a um único valor de chave estrangeira. Quando uma única linha puder ser relacionada a várias outras linhas de uma tabela diferente, a tabela de junção será necessária para associá-las.
Exemplo
Considere o caso de Produtos, que podem ser fornecidos por qualquer um dos diversos Fornecedores, e de qualquer Fornecedor que pode fornecer qualquer número de Produtos. As tabelas Produtos e Fornecedores possuem a estrutura definida abaixo:
| Tabela de Produtos |
|
|
Tabela de Fornecedores |
|
|
| Nome da Coluna | Tipo de Dado |
|
Nome da Coluna | Tipo de Dado |
|
| ID_do_Produto | Number |
|
ID_do_Fornecedor | Number |
|
| Nome | Varchar |
|
Nome | Varchar |
|
| Descrição | Varchar |
|
Rua | Varchar |
|
| Preço | Number |
|
Cidade | Varchar |
|
|
|
|
|
Estado/Província | Char(2) |
|
|
|
|
|
CEP | Varchar |
|
|
|
|
|
País | Varchar |
|
Definições das Tabelas Produtos e Fornecedores
Para vincular essas duas tabelas e localizar os produtos oferecidos por um determinado fornecedor, é necessária a tabela Produtos-Fornecedores , definida a seguir.
| Tabela Produtos-Fornecedores | |
| Nome da Coluna | Tipo de Dado |
| ID_do_Produto | Number |
| ID_do_Fornecedor | Number |
Definição da Tabela Produtos-Fornecedores
Essa tabela de junção contém as chaves primárias de produtos e fornecedores e faz sua vinculação. Uma linha na tabela indicaria que um fornecedor específico oferece um determinado produto. Todas as linhas cuja coluna ID_do_Fornecedor correspondesse a uma identificação específica de fornecedor forneceriam uma listagem de todos os produtos oferecidos por esse fornecedor.
No Modelo de Design, essa tabela intermediária é redundante pois um modelo de objeto pode representar diretamente as associações muitos-para-muitos. As classes Fornecedores e Produtos e seus relacionamentos são mostrados na Figura 8, junto com a classe Endereços, extraída da classeFornecedores, de acordo com a discussão anterior.

Representação das Classes Produtos e Fornecedores
Geralmente, algumas tabelas terão uma estrutura semelhante. No Modelo de Dados Relacional, não existe o conceito de generalização; portanto, não há como representar duas ou mais tabelas com alguma estrutura em comum. Algumas vezes, uma estrutura comum resulta de uma anormalidade de desempenho, como o caso acima em que a tabela Endereços, extraída em uma classe separada, está 'implícita'. Nos outros casos, as tabelas compartilham características mais fundamentais que podem ser extraídas em uma classe pai generalizada com duas ou mais subclasses. Para localizar oportunidades de generalização, procure por colunas repetidas em várias tabelas, onde o texto tem mais semelhanças do que diferenças.
Exemplo
Considere as tabelas ProdutosDeSoftware e ProdutosDeHardware abaixo:
| Tabela ProdutosDeSoftware |
|
|
Tabela ProdutosDeHardware |
|
| Nome da Coluna | Tipo de Dado |
|
Nome da Coluna | Tipo de Dado |
| ID_do_Produto | Number |
|
ID_do_Produto | Number |
| Nome | Varchar |
|
Nome | Varchar |
| Descrição | Varchar |
|
Descrição | Varchar |
| Preço | Number |
|
Preço | Number |
| Versão | Number |
|
Conjunto | Number |
Tabelas ProdutosDeSoftware e ProdutosDeHardware
Observe que as colunas destacadas em azul são idênticas; essas duas tabelas compartilham a maior parte de suas definições em comum e diferem somente um pouco. Para essa representação, podemos extrair uma classe Produtos comum que possui as subclasses ProdutosDeSoftware e ProdutosDeHardware, conforme mostra a figura a seguir:

Classes ProdutosDeSoftware e ProdutosDeHardware, mostrando uma generalização da classe Produtos
A figura abaixo, que reúne todas as definições de classe, mostra um diagrama de classes consolidado para o sistema Entrada de Pedidos (somente as classes principais)

Diagrama de Classes Consolidado para o Sistema Entrada de Pedidos
Replicar um comportamento é um procedimento mais difícil, pois geralmente os bancos de dados relacionais não são orientados a objetos e não parecem ter nada semelhante às operações em uma classe no modelo de objeto. Os passos a seguir podem ajudar a reconstruir o comportamento das classes identificadas acima:
|
Rational Unified Process
|