O Modelo Relacional 1 Criando relações em SQL Observe que o tipo (domínio) de cada campo está especificado, e reforçado pelo SGBD, não importando se tuplas são adicionadas ou modificadas. A tabela Enrolled mantêm informações sobre cursos que os estudantes fazem. CREATE TABLE Students (sid: CHAR(20), name: CHAR(20), login: CHAR(10), age: INTEGER, gpa: REAL) CREATE TABLE Enrolled (sid: CHAR(20), cid: CHAR(20), grade: CHAR(2)) 2 1
Adicionando e removendo tuplas Inserindo um tupla: INSERT INTO Students (sid, name, login, age, gpa) VALUES (53688, Smith, smith@ee, 18, 3.2) Removendo tuplas satisfazendo um condição (e.g., name = Smith): DELETE FROM Students S WHERE S.name = Smith Mais trade veremos variações poderosas desses comandos. 3 Restrições de integridade (RIs) RI: condição que deve ser satisfeita para qualquer instância do BD, p.ex., restrições de domínio. RIs são especificadas na definição do esquema. RIs são checadas quando o BD é modificado. Uma instância legal de uma relação satisfaz todas as RIs (). Checar as RIs é responsabilidade do SGBD Evita erros na entrada de dados! 4 2
Restrições de chave primária Um conj. de atributos é uma chave para uma relação se : 1. Não há duas tuplas distintas que tenham a mesma chave, e 2. Isto não seja verdade para nenhum subconj. da chave. Se não é uma superchave. Se houver mais de uma chave para a relação, uma é escolhida pelo DBA como sendo a chave primária. P.ex., sid é chave para Students. (E name?) O conjunto {sid, gpa} é uma superchave. 5 Chaves primárias e candidatas Possibilidade de chaves candidatas (especificadas usando UNIQUE), uma é escolhidas chave primaria. Para um dado student e course, há uma única nota. vs. Students podem tomar apenas um course, e receber uma nota por aquele curso; além disso não há dois alunos num curso com a mesma nota. Usada sem cuidado uma RI pode previnir o armazenamento de uma instância factível! CREATE TABLE Enrolled (sid CHAR(20) cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid,cid) ) CREATE TABLE Enrolled (sid CHAR(20) cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid), UNIQUE (cid, grade) ) 6 3
Chave estrangeira e RIs Chave estrangeira: Conj. de atributos em uma relação que é usado para referenciar uma tupla em outra relação (deve corresponder a chave primária daquela relação). Uma espécie de ponteiro lógico. P.ex., sid é chave estrangeira se referindo a Students: Enrolled(sid: string, cid: string, grade: string) Se todas restriçõoes de chave estrangeira são satisfeitas, as RIs são satisfeitas, não há referências penduradas. Cite um modelo sem RIs? Links em HTML! 7 Chaves estrangeiras em SQL Apenas a alunos listados na relação Students devem ter permitida a matrícula. CREATE TABLE Enrolled (sid CHAR(20), cid CHAR(20), grade CHAR(2), PRIMARY KEY (sid,cid), FOREIGN KEY (sid) REFERENCES Students ) Enrolled sid cid grade 53666 Carnatic101 C 53666 Reggae203 B 53650 Topology112 A 53666 History105 B Students sid name login age gpa 53666 Jones jones@cs 18 3.4 53688 Smith smith@eecs 18 3.2 53650 Smith smith@math 19 3.8 8 4
Satisfazendo RIs Considere Students e Enrolled; sid em Enrolled é uma chave estrangeira que referencia Students. O que acontece se uma tupla de Enrolled com um student id (sid) inexistente é inserido? (Rejeição!) E quando uma tupla de Students é removida? Remova todas tuplas de Enrolled que se referem a ela. Disabilite remoção de tuplas referenciadas de Students. Mude o sid de tuplas em Enrolled que se referem a esta para um sid default ou null. E se a chave primária de Students for mudada? 9 De onde vem a RIs? RIs são baseadas na semântica do mundo real descrito pela relacões do BD. Podemos verificar se uma instância do BD satisfaz as RIs mas nunca podemos inferir que uma RI e sempre satisfeita usando somente uma instância do BD. Todavia uma RI deve ser verdadeira para todas as instâncias possíveis. RIs usando Chaves e chaves estrangeiras são as mais comuns, outras, mais gerais, são possíveis. 10 5
Linguagens de consultas relacionais O ponto forte do modelo relacional: suporte a uma linguagem simples, mas poderosa, de consulta. Consultas podem ser escritas intuitivamente, o SGBD é responsável pela uma avaliação eficiente. chave : semântica precisa para consultas. Permite o otimizador re-ordenar operações, e ainda assim garantindo a mesma resposta (correta). 11 A linguagem de consulta SQL A linguagem de consulta relacional mais usada. Padrão corrente: SQL-92. Encontre todos os students com 18 anos: SELECT * FROM Students S WHERE S.age=18 sid name login age gpa 53666 Jones jones@cs 18 3.4 53688 Smith smith@ee 18 3.2 Para mostras apenas os names a 1a linha muda para: SELECT S.name 12 6
Consultando várias relações O que faz a seguinte consulta? SELECT S.name, E.cid FROM Students S, Enrolled E WHERE S.sid=E.sid AND E.grade= A Dada a seguinte instância de Enrolled (RI satisfeita? (veja a instância anterior de Students): sid cid grade 53831 Carnatic101 C 53831 Reggae203 B 53650 Topology112 A 53666 History105 B obtemos: S.name Smith E.cid Topology112 13 Semântica de uma consulta Um método de avaliação conceitual para a consulta anterior: 1. FROM: calcule o produto cartesiano de Students e Enrolled 2. WHERE: Verifique as condições, descartando as tuplas que falharem 3. SELECT: Remova os atributos não desejados Importante: a avaliação real poderia ser muito diferente, porém a resposta seria a mesma. 14 7
Produto cartesiano das instâncias de Students e Enrolled S.sid S.name S.login S.age S.gpa E.sid E.cid E.grade 53666 Jones jones@cs 18 3.4 53831 Carnatic101 C 53666 Jones jones@cs 18 3.4 53832 Reggae203 B 53666 Jones jones@cs 18 3.4 53650 Topology112 A 53666 Jones jones@cs 18 3.4 53666 History105 B 53688 Smith smith@ee 18 3.2 53831 Carnatic101 C 53688 Smith smith@ee 18 3.2 53831 Reggae203 B 53688 Smith smith@ee 18 3.2 53650 Topology112 A 53688 Smith smith@ee 18 3.2 53666 History105 B 53650 Smith smith@math 19 3.8 53831 Carnatic101 C 53650 Smith smith@math 19 3.8 53831 Reggae203 B 53650 Smith smith@math 19 3.8 53650 Topology112 A 53650 Smith smith@math 19 3.8 53666 History105 B 15 Resumo - Modelo relacional Uma representação tabular dos dados. Simples e intuitiva, é o padrão de facto. Restrições de integridade (RIs) podem ser especificadas, baseadas na semântica da aplicação. SGBD verifica as mesmas. RIs importantes: chaves primárias e estrangeiras. Sempre há restrições de domínio. Linguagem de consulta natural e poderosa. 16 8