Persistência de Classe e Auto - Prof. Vida

Propaganda
UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ).
Prof. Robinson Vida Noronha
Tema: Persistência de Classes e de seus Relacionamentos
1
Persistência de Classe e AutoRelacionamento em Tabelas de Banco de
Dados
1) Introdução
!
Em algumas situações, pode ser necessário preservar os objetos criados e seus
relacionamentos em uma aplicação de maneira permanente. Ou seja, os dados fornecidos
pelo usuário devem poder ser resgatados em uma outra oportunidade. Uma das maneiras
de se “persistir” os dados é armazenar os seus valores em tabelas de um banco de
dados.
!
Pode-se considerar que existem basicamente dois tipos de banco de dados: i) os
banco de dados orientados a objetos e ii) os banco de dados que não são orientados a
objetos. Nesse material é considerado apenas o banco de dados não orientado a objetos.
!
Normalmente, uma classe deverá ter o seu equivalente em forma de tabela. Nesse
caso, cada atibuto será uma coluna na tabela, o nome da tabela será o nome da classe e
o nome do banco de dados, o nome do pacote.
!
Uma classe deverá ter o seu equivalente em forma de tabela. Nesse caso, cada
atibuto será uma coluna na tabela e o nome da tabela será o nome da classe.
!
O relacionamento é armazenado em uma tabela a parte.
!
!
2) Exemplo Prático - Como representar uma tabela e seu relacionamento.
!
Como exemplo prático, a classe exemplificada na Figura 1 terá os seus parâmetros
persistidos em uma tabela do banco de dados. Na Figura 1, apenas os atributos da classe
estão representados.
!
De maneira reduzida, os passos a serem seguidos são dois a saber:
* criar uma base de dados
* criar a(s) tabela(s) com os atributos da classe
* criar tabelas que representem os relacionamentos
UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ).
Prof. Robinson Vida Noronha
Tema: Persistência de Classes e de seus Relacionamentos
2
Figura 1 - Exemplo de classe: Classe Disciplina
!
!
A Base de Dados criada poderia ser denominada de Academico, conforme
ilustram as Figuras 2 e 3.
Figura 2 - Definição do DataBase ou Base de Dados.
UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ).
Prof. Robinson Vida Noronha
Tema: Persistência de Classes e de seus Relacionamentos
3
Figura 3 - DataBase Criado
3) Instrução SQL para a criação das Tabelas
!
O Banco de Dados MySql disponibiliza a linguagem SQL para os desenvolvedores
de Banco de Dados. A seguir, apresenta-se as instruções para a criação da tabela
Disciplina ilustrada na Figura 1 e para a criação da tabela preRequisitoDisciplina.
create table academico.disciplina
(
codigo varchar(10) not null
, nome varchar(200) not null
, quantidadeAulasTeoricas int
, quantidadeAulasPraticas int
, quantidadeAulasDistancia int
, primary key(codigo)
, unique(nome)
);
create table academico.preRequisitoDisciplina
(
codigo varchar(10) not null
, codigoPre varchar(10) not null
, primary key(codigo, codigoPre)
, foreign key (codigo) references ACADEMICO.Disciplina(codigo)
, foreign key (codigoPre) references ACADEMICO.Disciplina(codigo)
,unique(codigo,codigoPre)
);
4) Instrução SQL para a Inserção de Dados nas Tabelas Criadas
UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ).
Prof. Robinson Vida Noronha
Tema: Persistência de Classes e de seus Relacionamentos
!
4
Na Figura 4, é apresentada a instrução SQL que permite inserir dados nas tabelas.
Na primeira linha, o código “delete
from
Disciplina” limpa todos os registros
anteriores na tabela. Essa instrução foi dada apenas por precaução.
!
O segundo grupo de instrução da Figura 6, três disciplinas são inseridas no banco
de dados. Destaca-se aqui que com uma instrução SQL, vários dados podem ser
inseridos no Banco de dados. Finalizando, o terceiro grupo de instrução, registra apenas
os pré-requisitos das disciplinas na tabela “preRequisitoDisciplina”.
Figura 4 - Instruções para Inserção de Dados nas Tabelas “Disciplina” e
“preRequisitoDisciplina”.
5) Tentativa de “quebrar” a chave
!
Qualquer tentativa de inserir algum registro que viole as “keys” definidas para a
tabela é interpretada como erro pelo Banco de Dados.
!
Por exemplo, a tentativa de inserir na tabela “preRequisitoDisciplina” um registro no
campo “codigo” ou “codigoPre” que não tenha sido previamente inserido na tabela
Disciplina, conforme ilustra a Figura 5, é interpretada como erro, conforme ilustra a Figura
6.
Figura 5 - Instrução SQL de inserção de registro no banco de dados. Ocorrerá um
erro de execução.
UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ).
Prof. Robinson Vida Noronha
Tema: Persistência de Classes e de seus Relacionamentos
5
Figura 6 - Erro de tentativa de “quebra” de “foreign key”.
!
Outro exemplo de tentativa de “quebra” de chave é ilustrada na Figura 9 a seguir.
Nesse exemplo, tenta-se excluir de maneira indevida um registro. Na instrução ilustrada
na Figura 7, o código ʻdelete from Disciplina where codigo = “FI63A”ʼ não
pôde ser executado. A disciplina “FI63A” possui uma ocorrência também na tabela
“preRequisitoDisciplina”, conforme ilustra a Figura 9.
Figura 7 - Instrução SQL que tenta excluir de maneira indevida um registro no banco de dados.
6) Visualização dos Dados Armazenados
!
Os dados armazenados nas Tabelas podem ser visualizados por meio de instrução
SQL específica, conforme ilustram as Figuras 7 e 8 a seguir.
Figura 8 - Instrução SQL que permite visualizar os dados armazenados na tabela Disciplina.
UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ).
Prof. Robinson Vida Noronha
Tema: Persistência de Classes e de seus Relacionamentos
Figura 9 - Instrução SQL que permite visualizar os dados armazenados na tabela
preRequisitoDisciplina.
7) Exercício
a) Criar duas tabelas para armazenar os dados da classe Pessoa da Figura 9 e
de seu auto-relacionamento “amizadeCom”. Defina como chave primária o
campo “CPF”.
6
UTFPR – DAELN - Disciplina de Fundamentos de Programação II ( IF62C ).
Prof. Robinson Vida Noronha
Tema: Persistência de Classes e de seus Relacionamentos
b) Para o Diagrama de Classes a seguir, defina tabelas no banco de dados que
sejam capazes de armazenar os seus dados e seus relacionamentos.
Dica: Para alterar a tabela Disciplina já criada, a seguinte instrução poderia ser
usada:
alter table academico.disciplina
add codigoTurma varchar(10);
alter table academico.disciplina
add foreign key(codigoTurma) references academico.turma;
7
Download