O Modelo de Dados Relacional (Capítulo 3) Origem do Modelo Relacional Este modelo foi proposto primeiramente pelo Dr. E.F. Codd da IBM em 1970 no seguinte artigo: "A Relational Model for Large Shared Data Banks," Communications of the ACM, June 1970. Este artigo causou uma verdadeira revolução na área de banco de dados, hoje a maioria dos SGBDs implementam tal modelo (e.g. DB2, Oracle, Sybase, MySql, SQLServer, Access e PostgreSQL). 2 Conceitos do Modelo Relacional O Modelo de Dados relacional é fundamentado no conceito de relação matemática. Uma relação é um conceito matemático fundamentado na teoria dos conjuntos. Atualmente os SGBDs relacionais são os mais populares, devido a simplicidade do modelo de dados e sua forte fundamentação matemática. 3 Definições informais Relação: Uma tabela de valores – Uma relação pode ser pensada como um conjunto de linhas (tuplas) ou, alternativamente, um conjunto de colunas que formam uma tabela. – Cada linha representa um fato correspondente a uma entidade ou relação do mundo real. – Cada linha tem um valor de um item (ou conjunto de itens) que identifica de forma única aquela linha na tabela (chave). – Cada coluna recebe um nome usado como identificador para o atributo. 4 Definições Formais Uma relação pode ser definida de várias formas. O esquema da relação: R (A1, A2, .....An) define a relação R sobre os atributos A1, A2, .....An Por exemplo CLIENTE (Cli-id, Cli-nome, Endereço, Telefone) Aqui, CLIENTE é uma relação definida com quatro atributos Cli-id, Cli-nome, Endereço, Telefone, cada um dos quais tem um domínio ou conjunto de valores válidos. 5 Sumário de definições Termos informais Termos formais Tabela Coluna Linha Valores de coluna Definição da tabela Tabela “povoada” Relação Atributo/domínio Tupla Domínio Esquema da relação Extensão 6 Exemplo - Figura 3.1 do livro 7 Características das Relações Ordem das tuplas em uma relação r(R): Não consideramos as tuplas como estando ordenadas, embora elas apareçam em forma tabular. Ordem dos atributos no esquema R (and of values within each tuple): Os atributos são considerados ordenados R(A1, A2, ..., An). Valores em uma tupla: Todos os valores são considerados atômicos (indivisíveis). Um valor especial chamado null é usado para representar valores que são desconhecidos ou inaplicáveis para certas tuplas. 8 Caracterísiticas das relações Notação: - Para nos referir ao atributo Ai da tupla t usamos t[Ai] = vi. Similarmente, t[Au, Av, ..., Aw] refere-se a subtupla de t contendo os atributos Au, Av, ..., Aw, respectivamente. 9 Restrições de integridade relacional Restrições são condições que devem ser garantidas para todas as instâncias de relações válidas. Existem três tipos principais de restrições: 1. Restrições de chave. 2. Restrições de entidade. 3. Restrições de integridade referencial. 10 Restrição de chave Superchave de R: Um conjunto de atributos SK de R such that para quaisquer tuplas distintas t1 e t2 em r(R), t1[SK] t2[SK]. Chave de R: Uma superchave mínima; isto é, uma superchave K tal que a remoção de qualquer de seus atributos resulta em um conjunto que não é superchave. Exemplo: O esquema de relação CAR (CARRO): CAR(State, Reg#, SerialNo, Make, Model, Year) tem duas chaves Key1 = {State, Reg#}, Key2 = {SerialNo}, as quais são também superchaves. {SerialNo, Make} é uma superchave, mas não uma chave. Se uma relação tem várias chaves candidatas uma é escolhida arbitrariamente para ser a chave primária. Os atributos da chave primária devem ser sublinhados na definição do esquema. 11 Integridade de Entidade Esquema do banco de dados relacional: Um conjunto S de esquemas de relações que pertencem ao mesmo banco de dados. S é o nome do Banco de Dados. S = {R1, R2, ..., Rn} Integridade de entidade: Os atributos da chave primária de qualquer esquema de relação em S não podem ter valores null em qualquer tupla r(R). Isto porque a chave primária é usada para identificar tuplas individuais. t[PK] null para qualquer tupla em r(R) Nota: Na verdade essa restrição (implicita no caso de chaves primárias) pode ser aplicada a outros atributos. 12 Integridade referencial Uma restrição envolvendo duas relações (As restrições anteriores envolvem apenas uma relação). Usadas para especificar relacionamentos entre tuplas em duas relações: A relação referenciadora e a relação referenciada. Tuplas na relação referenciadora R1 tem atributos FK (chamados de chave estrangeira) que referenciam atributos da chave primária PK da relação referenciada R2. Uma tupla t1 em R1 referencia uma tupla t2 em R2 se t1[FK] = t2[PK]. Podemos ilustrar uma restrição de integridade referencial usando um arco direcionado de R1.FK to R2.PK. 13 Restrição de integridade referencial Os valores da chave estrangeira FK de uma realção R1 podem ser: (1) Um valor da chave primária da relação referenciada R2,, or.. (2) a null. No caso (2), a FK em R1 Não deve ser parte de sua chave primária. 14 Outros tipos de restrições Restrições de integridade semânticas: - Baseada na semântica da aplicação e não podem ser expressas pelo modelo. - Normalmente isso é tratado nas aplicações e em alguns casos com triggers (mais sobre isso no futuro). 15 Exercício em classe ESTUDANTE(RA, nome, deptCurso, dataNascimento) Disciplina(codigo, nomeDisc, dept) MATRÍCULA(RA, CodigoDisciplina, Semetre, Nota) LIVRO_ADOTADO(CodigoDisc, Semestre, livro_ISBN) LIVRO(ISBN, titulo, editora, autor) 16