300 likes | 447 Views
Modelo relacional noções básicas tradução do modelo de objectos álgebra relacional. Gabriel David FEUP - Rua dos Bragas, 4050-123 Porto - PORTUGAL Tel. 351-222041842 - Fax: 351-222000808. Email: gtd@fe.up.pt URL: http://www.fe.up.pt. Objectivos. Ted Codd, 1970
E N D
Modelo relacional noções básicas tradução do modelo de objectos álgebra relacional Gabriel David FEUP - Rua dos Bragas, 4050-123 Porto - PORTUGAL Tel. 351-222041842 - Fax: 351-222000808 Email: gtd@fe.up.pt URL: http://www.fe.up.pt
Objectivos • Ted Codd, 1970 • Fornecer um elevado grau de independência dos dados. • Proporcionar uma definição comum dosdados de simplicidade espartana, de forma que uma vasta gama de utilizadores numa empresa possa com ela lidar. • Simplificar o potencialmente gigantesco trabalho do administrador da BD. • Introduzir uma fundamentação teórica na gestão de BD. • Fundir os campos de pesquisa de factos e gestão de ficheiros, preparando a posterior adição de serviços de inferência no mundo comercial. • Elevar a programação de aplicações de BD para um novo nível, em que conjuntos sejam tratados como operandos, em vez de serem tratados elemento a elemento.
Sistemas • Norma ANSI/SPARC • Alguns sistemas relacionais • Rendez-vous • Oracle • QBE • Ingres • Informix • Há sistemas que têm estrutura tabular, mas não possuem todos os operadores relacionais básicos ou apresentam limitações práticas importantes (semi-relacionais). • Sybase • Paradox • Access • SQL ...
Produto cartesiano • domínios • D1 = { rosa, cravo, tulipa } • D2 = { branco, amarelo, vermelho, negro } • produto cartesiano • D1 D2 = { (r,b), (r,a), (r,v), (r,n), (c,b), (c,a), (c,v), (c,n), (t,b), (t,a), (t,v), (t,n), (r,b) } • = { (x, y) | x D1, y D2 } D2 • branco amarelo vermelho negro • rosa (r,b) (r,a) (r,v) (r,n) • cravo (c,b) (c,a) (c,v) (c,n) • tulipa (t,b) (t,a) (t,v) (t,n) D1
Tuplo • Generalização do produto cartesiano • D1 D2 D1 = { (x, y, z) | x D1, y D2, z D1} • tuplo (n-uplo) • sequência ordenada, eventuais repetições; • conjunto, sem ordem nem repetições • tantos elementos quantos os domínios do produto cartesiano • (2 - par; 3 - terno; ...)
Relação • relação subconjunto de produto cartesiano • R D1 D2 • extensão R = { (r,b), (c,v), (t,n) } • compreensão R= { (f, c) | existe no meu jardim a flor f com a côr c } • relação é conjunto • os tuplos são todos diferentes (existe chave) • a ordem dos tuplos na relação é irrelevante • a ordem dos componentes nos tuplos é importante (referência por posição) • se se atribuir um nome a cada elemento do tuplo (atributo), onde aquele for indicado, a ordem não interessa - vê-se o tuplo como um mapeamento dos atributos para os respectivos valores • se t=(r, b) então flor(t) = r, côr(t) = b, e também t = (r, b) = (côr: b, flor: r)
Relação normalizada • relação não normalizada: contém tuplos cujos valores são conjuntos, i.e., não atómicos • não normalizada R = { (r, {b,a}), (c, {b,v}), (t,n)} • normalizada correspondente R= {(r,b), (r,a), (c,b), (c,v), (t,n)}
Tabela • atributo : nome de uma coluna • esquema : conjunto dos atributos • esquema da BD : contém o conjunto dos esquemas das relações • BD : conjunto das instâncias das relações R = { (r,b), (c,v), (t,n) } • R • Flor Côr • b • v • n esquema de R [plano] instância de R [conteúdo] tuplo linha componente coluna
Chaves de relações • Um conjunto S de atributos de uma relação R é uma chave se • nenhuma instância de R, representando um estado possível do mundo, pode ter dois tuplos que coincidam em todos os atributos de S e não sejam o mesmo tuplo; • nenhum subconjunto próprio de S satisfaz (1). • Ex: chave(R) = {flor} • (f,c1), (f, c2) c1 = c2 • significa que só pode haver uma linha para uma dada flor • Ex: chave(Inscrito) = {coddis, BIa} • (d, a, r1), (d, a, r2) r1 = r2 • só coddis ou só bia não garantem a condição (1) • {coddis, bia, resultado} não é chave porque contém uma chave. • conceito de chave depende do esquema, não da instância • várias chaves numa relação — chaves candidatas; escolhe-se uma delas como chave primária
Do projecto à implementação • O modelo de objectos contém a maior parte da estrutura declarativa: • especificação das classes • atributos • hierarquia de herança • e associações. • Bases de Dados • a versatilidade do paradigma OO permite o projecto não só de sistemas e programas como também de bases de dados, sejam elas hierárquicas, reticuladas, relacionais ou orientadas por objectos • as bases de dados relacionais são um tipo importante a considerar, devido à sua popularidade • embora não tão populares, as bases de dados orientadas por objectos são importantes para diversas áreas de aplicação
Identificadores de objectos OID’s • por várias razões, entre as quais a simplicidade, recorre-se a atributos ID’s , para mapear o conceito de identificador de objecto implícito na noção de objecto • utilização de ID’s • vantagens: imutabilidade, independência, estabilidade • desvantagens: não são suportados pelos SGBDR’s, conflituam com a intenção original das BDR’s de manipular informação com base apenas nos seus valores
Classes • Cada classe é mapeada para uma ou mais tabelas • a tabela terá os mesmos atributos que a classe respectiva, mais o atributo referente ao identificador de objecto • decide-se para cada atributo da tabela se poderá ou não ter valores nulos • atribui-se a cada atributo um domínio, pré-definido ou definido pelo utilizador
Associações binárias • Em geral, uma associação pode ou não ser mapeada para uma tabela, dependendo: • do tipo e multiplicidade da associação • das preferências do projectista em termos de extensibilidade, número de tabelas e compromissos de performance • Uma associação muitos-para-muitos é sempre mapeada para uma tabela distinta • a chave primária será constituída pela concatenação das chaves primárias de cada uma das tabelas envolvidas na associação
Associações binárias (1 - n) • Uma associação um-para-muitos pode ser mapeada de 2 formas • criação de uma tabela distinta para a associação • adicionar uma chave-externa na tabela relativa a muitos • Vantagens de não criar uma tabela distinta • menos tabelas no esquema final • maior performance devido a um menor número de tabelas a navegar • Desvantagens de não criar uma tabela distinta • menos rigor em termos de projecto do esquema • extensibilidade reduzida • maior complexidade
Associações binárias (1 - n) ... não criação de 1 tabela distinta criação de 1 tabela distinta
Generalizações • 1. Tanto a superclasse como cada uma das subclasses são mapeadas para tabelas distintas • abordagem logicamente correcta e extensível • envolve várias tabelas, pelo que a navegação da superclasse para as subclasses pode tornar-se lenta • 2. Eliminação da navegação da superclasse-para-subclasse • elimina a tabela da superclasse e replica todos os atributos dela em cada subclasse • ideal, quando a superclasse possui poucos atributos e as subclasses muitos atributos • não se pode garantir a unicidade dos valores dos atributos da superclasse • 3. Uma tabela para a superclasse • criação de apenas uma tabela para a superclasse • todos os atributos das subclasses são acrescentados à tabela da superclasse • cada subclasse utiliza apenas os atributos que lhe pertencem, deixando os restantes com valores nulos • viola a terceira forma normal • abordagem interessante quando em presença de poucas subclasses (2 ou 3)
Bases de Dados Relacionais • O mapeamento para BD Relacionais não é único • existem duas formas de mapear uma associação • existem três formas de mapear uma generalização • é necessário adicionar detalhes que não existem no modelo de objectos, tais como, chaves primárias e chaves candidatas, se um atributo pode ter valores nulos ou não • obriga à atribuição de um domínio a cada atributo • e obriga a listar os atributos mais frequentemente acedidos • Resumindo • criar um atributo id correspondente a cada classe • classe implementada por relação • associação muitos-para-muitos ou ternária implementada por relação • associação muitos-para-um implementada por atributo extra (id do lado 1)na relação do lado muitos
Exemplo dos cursos {chave:(codcurso, ano, letra)} {chave:(curso, turma)} Curso codcurso designacur Turma ano letra {chave:(codcurso)} segue {chave:(disciplina, turma)} lecciona {chave:(aluno)} {chave:(codcurso, coddis)} atribuído {chave:(BIp)} plano Professor BIp nome morada telefone habilitação grupo Aluno BIa nome morada telefone data_nasc Disciplina coddis sigla designadis {chave:(coddis)} inscrito {chave:(BIa)} {chave:(disciplina, aluno)} resultado
Tradução Relações obtidas automaticamente 1 Curso(curso-ID, codcurso, designacur) 2 Disciplina(disciplina-ID, coddis, sigla, designadis) 3 Turma(turma-ID, curso-ID, ano, letra) 4 Professor(prof-ID, bip, nome, morada, telefone, habilitação, grupo) 5 Aluno(aluno-ID, bia, nome, morada, telefone, data_nasc, turma-ID) 6 Plano(curso-ID, disciplina-ID) 7 Inscrito(disciplina-ID, aluno-ID, resultado) 9 Lecciona(prof-ID, disciplina-ID, turma-ID) Em itálico, chaves alternativas classes relações associações só um conceito, maior uniformidade, menos operadores
Chaves naturais • Simplificação: quando existir uma chave alternativa, o ID pode ser substituído por esta, em todas as ocorrências, e ignorado • é preferível, no modelo relacional, usar chaves naturais em vez de artificiais Esquema relacional de Cursos 1 Curso(codcurso, designacur) 2 Disciplina(coddis, sigla, designadis) 3 Turma(codcurso, ano, letra) 4 Professor(bip, nome, morada, telefone, habilitação, grupo) 5 Aluno(bia, nome, morada, telefone, data_nasc, codcurso, ano, letra) 6 Plano(codcurso, coddis) 7 Inscrito(coddis, bia, resultado) 9 Lecciona(bip, coddis, codcurso, ano, letra)
Conteúdo das chaves • Quando os esquemas das relações são uma tradução do modelo de objectos: • relação vinda de uma classe: a chave de utilizador da classe é a chave da relação (Bia em Aluno) • relação vinda de uma associação muitos-para-muitos: chave tem, frequentemente, todos os atributos (Plano) • associação muitos-para-um de E1, ..., Ek-1 em Ek: as chaves de E1, ..., Ek-1 formam uma chave (Lecciona) • Quando os atributos vêm de associações • associação muitos-para-um de E para F: o atributo em E é uma chave externa para F (Atribuído) • associação um-para-um entre E e F: tanto E como F podem conter a chave chave externa para a outra relação
Associação característica • A classe D tem chave emprestada se, para definir a sua chave de utilizador, for necessário recorrer à chave de outra classe C que seja o lado um de uma associação de que D é o lado muitos • caso da turma num curso: turma 2B da LEIC e 2B da LGEI • a existência de objectos em D depende da existência de objectos em C, enquanto que os objectos em C existem independentemente de D • diz-se que D corresponde a uma entidade fraca e que entre D e C existe uma associação característica • exemplo: classe de Facturas e classe de Linhas das facturas
Elementos activos na BD • Esquema da BD = esquemas das tabelas + restrições de integridade • elementos activos complementam os estruturais • Restrição • função booleana cujo valor têm que ser verdadeiro • uma alteração que conduza a um estado que viole uma restrição é rejeitada • Trigger • código que espera por um evento (inserção, apagamento, …) • executa uma sequência de acções disparadas pelo evento • usado para verificar regras de integridade suplementares
Restrições de integridade • chave - identifica uma entidade; não pode haver duas entidades com a mesma chave; não pode ser nula • valor único - impede a repetição da mesma combinação de valores nos atributos envolvidos • valor não nulo - preenchimento obrigatório • integridade referencial - exige que um valor referido por uma entidade de facto exista na BD (chave externa) • domínio - exige que o valor pertença a um determinado conjunto ou gama • genérica - asserção que tem que ser verdadeira
Tuplos pendentes • tuplo pendente - tuplo numa tabela que não tem par na outra, ao combinar duas relações • formas de reduzir o problema 1) impondo restrições de integridade referencial • [se o valor V aparece em A de R1, também tem que existir em B de R2] • chave externa - restringir os valores num, ou vários atributos de uma tabela ao conjunto de valores nos atributos chave de uma outra relação [atributo cnome em Encom só deve admitir valores que existam na chave de Cliente] 2) colocando um símbolo especial nos atributos desconhecidos (), o valor nulo. • valores nulos não podem aparecer na chave primária • dois valores nulos são sempre diferentes