Вы находитесь на странице: 1из 15

O Modelo Relacional

Carla Geovana do N. Macrio1, Stefano Monteiro Baldo2


1

Embrapa Informtica Agropecuria Av. Andr Tosello, 209 - Baro Geraldo Caixa Postal 6041 13083-886 Campinas SP Brazil
2

Instituto de Computao Universidade Estadual de Campinas Caixa Postal 6176 13084-971 Campinas SP Brazil
carla@cnptia.embrapa.br, stefz@terra.com.br

Este trabalho foi produzido como parte da avaliao do curso MO-410 Introduo a Banco de Dados oferecido pelo Instituto de Computao da Unicamp em 2005/1. Abstract. The relational model has been the most widely used model in database area. It was proposed in 1970 and revolutionized the database field. Besides the new trends in software, like the object-oriented approach, the relational model is the dominant model in database market. This paper describes the relational model and its main features and advantages, including the SQL commands used to implement them. Also is presented rules to convert an Entity-Relationship diagram into a relational database schema, tailoring the user on the logical design of a database. Resumo. O modelo relacional atualmente o modelo mais utilizado em banco de dados. Proposto inicialmente em 1970, revolucionou o mercado desta rea e, apesar das novas tendncias de software como orientao a objetos, continua sendo o modelo dominante no mercado de banco de dados. Este trabalho descreve o modelo relacional, identificando suas principais caractersticas e vantagens e apresentando comandos em linguagem SQL para implementao destas caractersticas. Tambm apresenta regras para promover o mapeamento de um esquema no modelo Entidade Relacionamento para o modelo relacional, visando auxiliar o usurio na execuo da fase de projeto lgico de um banco de dados.

1. Introduo
O modelo relacional foi proposto por Edgar Codd em 1970, como uma nova maneira de representao de dados. Neste seu trabalho Codd mostrou que uma viso relacional dos dados permite a sua descrio em uma maneira natural, sem que sejam necessrias estruturas adicionais para sua representao, provendo uma maior independncia dos dados em relao aos programas. Em complementao, apresentou bases para tratar problemas como redundncia e consistncia. Mais tarde, em outro trabalho, Codd definiu uma lgebra relacional e provou, por meio de sua equivalncia com o clculo relacional, que ela era relacionalmente completa, dando fundamentao terica ao modelo relacional. Este modelo, por suas caractersticas e por sua completitude, mostrou ser uma excelente opo, superando os modelos mais usados quela poca: o de redes e o

hierrquico. A maior vantagem do modelo relacional sobre seus antecessores a representao simples dos dados e a facilidade com que consultas complexas podem ser expressas. Em meados dos anos 70 foram desenvolvidos os primeiros sistemas relacionais em projetos da IBM, como o Sistema-R, e da Universidade de Berkeley (Califrnia), que deu origem ao sistema Ingres. Desde ento, o uso deste modelo intensificou-se e a partir dos anos 80, o modelo relacional passou a ser dominante na rea de banco de dados. Tal crescimento fez o mercado de sistemas relacionais crescer bastante, tornando-se hoje um mercado milionrio. Vrios so os fornecedores atuais, dentre os quais podemos citar IBM, Microsoft, Sybase e Oracle, este ltimo uma empresa que comeou naquela poca e que hoje provavelmente a lder do mercado de banco de dados relacionais. Existem tambm sistemas como FireBird, MySQL e PostGres, que com a nova tendncia de software livre, vm sendo utilizados por vrias empresas. Ainda existem sistemas legados mantidos nos modelos antigos, como o IMS DBMS da IBM no modelo hierrquico e o IDS e IDMS no modelo de redes. H tambm uma nova abordagem que vem sendo bastante explorada: o modelo orientado a objetos, que tem com exemplos o Objectstore e o Versant . Apesar da orientao a objetos no ser um conceito novo, apenas recentemente, com a proposio de novas metodologias, como OMT e UML, e de linguagens de programao como C++ e Java, seu uso vem se intensificado, tornando-se um padro em vrias aplicaes de software. Com isso, a existncia de banco de dados orientados a objetos est sendo colocada como uma das revolues na rea de banco de dados. Assim, numa tentativa de reunir vantagens de objetos com as inerentes ao modelo relacional, tem-se os bancos de dados objetorelacional. Mesmo assim, o modelo relacional ainda o modelo dominante em seu mercado. A Linguagem SQL - Structured Query Language que foi desenvolvida originalmente pela IBM para consulta ao seu Sistema-R, evoluiu, vindo a tornar-se a linguagem mais usada para criao, manipulao e consultas em Sistemas Gerenciadores de Banco de Dados (SGBD) relacionais. Tal fato levou definio de uma SQL padro, permitindo aos seus usurios avaliar a completitude da linguagem oferecida pelos sistemas disponveis e a identificar diferenas entre caractersticas especficas de produtos. Alm disso, a padronizao garante portabilidade, j que produtos que se baseiam em caractersticas padro tendem a ser mais portveis. A primeira verso da SQL padro foi desenvolvida em 1986 pela American National Standards Institute (ANSI) e recebeu o nome de SQL-86. Em 1989 foi lanada a SQL-89, contendo uma reviso pouco expressiva da linguagem, com a incorporao de restries de integridade. J em 1992, a ANSI , em conjunto com a International Standards Organizations (ISO) lanou uma reviso mais significativa, ainda utilizada por muitos dos sistemas disponveis. Em 1999 foram adicionadas algumas outras extenses, como os gatilhos (triggers), gerando a SQL:1999. Apesar desta ser a linguagem padro atual, j existe uma nova verso, a SQL:2003 tambm chamada de SQL:200n.

Este trabalho apresenta uma introduo ao modelo relacional, discutindo seus principais conceitos e caractersticas, como restries de integridade, uma propriedade importante deste modelo. Em seguida passa-se execuo do projeto lgico de um banco de dados, mapeando um esquema gerado no projeto conceitual em Modelo Entidade Relacionamento (MER) para o modelo relacional. So dadas regras bsicas a serem usadas nesta atividade, tornando-a mais simples. Por fim tm-se uma introduo ao conceito de viso, muito utilizado no modelo relacional, que traz consigo vantagens como independncia de dados e segurana. Em todos os tpicos discutidos so utilizados exemplos para facilitar seu entendimento, complementados por comandos em SQL padro.

2. O Modelo Relacional
No modelo relacional a principal construo para representao dos dados a relao, uma tabela com linhas no ordenadas e colunas. Uma relao consiste de um esquema e de uma instncia. O esquema especifica o nome da relao e o nome e o domnio de cada coluna, tambm denominada atributo ou campo da relao. O domnio do atributo referenciado no esquema por seu nome e serve para restringir os valores que este atributo pode assumir. O esquema de uma relao invriavel ao longo do tempo, sendo modificado apenas por comandos especficos. Um exemplo de esquema de relao : Students (sid: string, name: string, login: string, age: integer, gpa: real). Neste caso est sendo definida a relao de nome Students, com atributos sid, name, login, age e gpa, cujos domnios so respectivamente string, string, string, integer e real. A instncia de uma relao o conjunto de linhas, tambm denominadas tuplas ou registros, distintas entre si, que compem a relao em um dado momento. Ela varivel, j que o nmero de tuplas e o contedo de seus atributos podem variar ao longo do tempo. A instncia de uma relao deve seguir sempre o seu respectivo esquema, respeitando o nmero de atributos definidos, bem como os seus domnios. Esta restrio, denominada restrio de domnio, muito importante. O modelo relacional somente considera relaes que satisfaam esta restrio. Um exemplo de uma instncia para o esquema Students ilustrado na Figura 1.
Sid 53666 53688 53650 Name Login Jones Smith Smith jones@cs smith@eecs smith@math age 18 18 19 gpa 3.4 3.2 3.8

Figura 1 Exemplo de instncia da relao Students

O nmero de tuplas que uma dada instncia possui denomina-se cardinalidade da relao e o nmero de atributos o seu grau. A instncia de relao da Figura 1 tem cardinalidade 3 e grau 5. Note que a cardinalidade varivel, mas o grau no. Um banco de dados relacional um conjunto de uma ou mais relaes com nomes distintos. O esquema do banco de dados relacional a coleo dos esquemas de cada relao que compe o banco de dados.

2.1. Criando e Modificando Relaes em SQL A linguagem SQL padro usa a palavra TABLE para referenciar uma relao. Um subconjunto desta linguagem forma a Linguagem de Definio de Dados (DDL) que compreende comandos bsicos para a criao, a remoo e a modificao de relaes. A criao de relaes em SQL feita usando-se o comando CREATE TABLE, com a especificao do respectivo esquema. Por exemplo, para criar a relao Students citada anteriormente tem-se:
CREATE TABLE Students (sid: CHAR(20), name: CHAR(20), login: CHAR(10), age: INTEGER, gpa: REAL)

Observe que com a execuo deste comando est sendo criada apenas a relao, sem que sejam atribudos quaisquer valores aos seus atributos. Para a remoo de uma relao do banco de dados usa-se o comando DROP TABLE. Assim, para remover a mesma relao Students tem-se:
DROP TABLE Students

Este comando remove a relao especificada, removendo a informao sobre o seu esquema e tambm as tuplas da instncia atual. O comando ALTER TABLE usado para alterao do esquema de uma relao. Ainda considerando a relao Students para alterar o seu esquema com a adio de um novo campo firstYear cujo domnio inteiro usa-se o comando:
ALTER TABLE Students ADD COLUMN firstYear: integer;

A execuo deste comando faz com que o esquema da relao seja alterado e com que para cada tupla da instncia corrente seja criado um novo atributo de nome firstYear, atribuindo a ele o valor null. Um outro subconjunto da linguagem SQL forma a Linguagem de Manipulao de Dados (DDL), que compreende comandos bsicos para a modificao e a recuperao de dados. O comando INSERT INTO usado para adicionar novas tuplas a uma relao. Por exemplo, para inserir uma tupla na relao Students, tem-se:
INSERT INTO Students (sid, name, login, age, gpa) VALUES (53688, Smith, smith@ee, 18, 3.2)

onde os valores descritos por VALUES, correspondem ao valor que cada atributo ter na nova tupla. As tuplas de uma relao so removidas por meio do comando DELETE FROM. Pode-se remover todas as tuplas de uma relao ou apenas aquelas que satisfaam uma dada condio. Para remover as tuplas de estudantes cujo nome (name) Smith na relao Students executa-se o comando:
DELETE FROM Students S WHERE S.name = Smith

A alterao do valor de atributos que compem as tuplas feita usando-se o comando UPDATE FROM. De forma semelhante ao comando DELETE FROM, podese modificar uma tupla especfica ou vrias delas por meio de um nico comando. Por exemplo:

UPDATE FROM Students S SET S.age = S.age + 1, S.gpa = S.gpa 1 WHERE S.sid = 53688

Este comando altera apenas a tupla da relao Students cujo atributo sid tenha valor igual a 53688. J o comando a seguir altera todas as tuplas cujo atributo gpa tenha valor maior ou igual a 3.2.
UPDATE FROM Students S SET S.gpa = S.gpa + 0.5 WHERE S.gpa >= 3.2

3. Restries de Integridade sobre Relaes


Um bom SGBD deve evitar a entrada de informao incorreta ou inconsistente em sua base de dados, garantindo, com isso, a qualidade da informao inserida. Uma restrio de integridade (RI) uma condio especificada no esquema da base de dados para restringir a informao a ser armazenada. Ou seja, a RI uma condio definida que deve ser verdadeira para qualquer instncia da base de dados. Se uma instncia da base de dados satisfaz todas as RIs especificadas, ento ela uma instncia vlida. Um bom SGBD garante as RIs, no permitindo a existncia de instncias invlidas. As RI so especificadas e conferidas em 2 momentos diferentes: especificao da RI: se d na definio do esquema da base de dados pelo usurio ou pelo administrador da base de dados (DBA); conferncia das RIs: feita pelo banco de dados toda vez que uma relao modificada por uma aplicao sendo executada.

O modelo relacional permite a especificao de vrios tipos de RIs. Um deles a restrio de domnio citada anteriormente. Outros tipos sero vistos a seguir. 3.1. Restries de Chaves A restrio de chave serve para garantir que as tuplas de uma relao sejam nicas. Para isso, identifica um conjunto mnimo de atributos que devem ter valores diferentes em todas as tuplas de uma instncia da relao. Este conjunto de atributos denomina-se chave candidata da relao e deve satisfazer os seguintes requisitos: no podem existir 2 tuplas diferentes com os mesmos valores para estes atributos, ou seja, a chave identifica unicamente qualquer tupla da relao vlida; ao retirar-se qualquer atributo componente da chave, ela deixa de identificar unicamente as tuplas.

Se o segundo requisito for violado, ento a chave candidata uma super-chave. Por exemplo temos que sid uma chave para a relao Student, pois identifica cada estudantes. J o conjunto {sid, gpa} uma super-chave da relao, pois ao retirar-se o atributo gpa, o atributo sid continua identificando unicamente as tuplas. O conjunto de todos os atributos de uma relao formam sempre uma super-chave desta relao. Pela definio de relao, sempre garantida a existncia de uma chave. Entretanto, cada relao pode conter vrias chaves candidatas. Cabe ao DBA escolher dentre elas aquela que ser a chave primria, a ser usada pelo banco de dados em operaes de otimizao. A escolha desta chave muito importante e deve ser feita

visando garantir a qualidade dos dados. Por exemplo, na relao Students, se name fosse escolhido como chave primria, no seria possvel a existncia de estudantes homnimos, o que talvez no refletisse corretamente os requisitos do sistema. A chave primria no pode assumir valor null. Especificando Restries de Chaves em SQL A especificao de uma chave e de uma chave primria em SQL feita respectivamente, pelos comandos UNIQUE e PRIMARY KEY. Na execuo do comando a seguir est sendo criada a relao Enrolled, cuja chave primria composta pelos atributos stdid e cid
CREATE TABLE Enrolled (stdid CHAR(20), cid CHAR(20), grade CHAR(2), PRIMARY KEY (stdid,cid) )

Caso fosse desejado que esta mesma relao tivesse uma chave composta pelos atributos cid e grade, sendo sid a chave primria da relao, deveria ser executado o comando:
CREATE TABLE Enrolled (stdid CHAR(20), cid CHAR(20), grade CHAR(2), UNIQUE (cid, grade), CONSTRAINT EnrolledKey PRIMARY KEY (cid) )

O uso de CONSTRAINT no comando serve para nomear uma restrio, facilitando sua identificao para impresso de mensagens de erro numa eventual ocorrncia de violao. Note que neste segundo exemplo cada estudante pode cursar apenas um curso e receber uma nica nota para este curso. E ainda que dois estudantes de um mesmo curso no recebem a mesma nota. Percebe-se, ento, que quando usada de forma displicente, uma restrio de integridade pode impedir o armazenamento de instncias de base de dados que surgem na prtica. 3.2 Restries de Chave Estrangeira No modelo relacional comum que a informao de uma relao esteja ligada informao de outra relao. Se uma delas modificada a outra tambm deve ser checada e modificada, se for o caso, de maneira a garantir a consistncia da informao. Para que o banco de dados possa fazer esta checagem, especificada uma restrio envolvendo ambas as relaes. Esta restrio denomina-se restrio de chave estrangeira. A chave estrangeira um conjunto de atributos de uma relao que usado para fazer referncia a uma tupla de outra relao, correspondendo chave primria da relao referenciada. A chave estrangeira deve conter o mesmo nmero de atributos da chave primria da outra relao, e seus respectivos domnios, mas no necessariamente os mesmos nomes. Alm disso, diferente da chave primria, pode assumir valor null. Por fim pode referenciar a relao que a contm, se necessrio. Considerando a relao Enrolled apresentada anteriormente, queremos garantir que apenas estudantes com registro vlido (sid) podem ser matriculados nos cursos. Para isso, cria-se uma chave estrangeira em Enrolled que corresponde chave primria da relao Students, conforme ilustra a Figura 2:

chave estrangeira

chave primria

cid Carnatic101 Reggae203 History105

grade stdid C B B 53666 53666 53650 53666

sid 53666 53688 53650

Name Jones Smith Smith

Login jones@cs

age 18

gpa 3.4 3.2 3.8

smith@eecs 18 smith@math 19

Topology112 A

Relao Enrolled (a que referencia)

Relao Students (a referenciada)

Figura 2 Exemplo de chave estrangeira Neste caso, se a aplicao tentar inserir em Enrolled uma tupla de um estudante de stdid 53673, o sistema de banco de dados ir rejeitar a operao, pois no existe um estudante em Students com este sid. Da mesma forma, ao tentar excluir de Students o estudante com sid 53650, o sistema no deve permitir a excluso, pois ele est sendo referenciado por Enrolled. Uma outra ao possvel para este caso seria a excluso de todas as tuplas de Enrolled que faam referncia a este estudante. Se todas as restries de chave estrangeiras definidas no banco de dados so garantidas, a sua integridade referencial alcanada, ou seja, garante-se que no h referncias pendentes. Especificando Restries de Chave Estrangeira em SQL O comando FOREIGN KEY identifica a chave estrangeira na criao da relao. Assim, para definir esta restrio para o exemplo da Figura 2 usa-se o comando:
CREATE TABLE Enrolled (stdid CHAR(20), cid CHAR(20), grade CHAR(2), PRIMARY KEY (stdid,cid), FOREIGN KEY (stdid) REFERENCES Students )

Com este comando garante-se que somente estudantes registrados em Students possam ser matriculados em cursos. Outra restrio colocada por este comando, por meio da chave primria, que cada estudante pode ter apenas uma nota por curso. 3.3. Restries Gerais Restries de domnio, de chave primria e de chave estrangeiras so consideradas como parte fundamental do modelo de dados relacional. Entretanto, elas no so suficientes para especificar outras restries mais genricas, como, por exemplo, a definio de intervalos de valores para determinados atributos. Para estes outros casos so usadas restries de tabelas e de assertivas. As restries de tabelas so associadas a um nica tabela e so checadas sempre que a tabela alterada. J as restries de assertivas so associadas a vrias tabelas e so checadas sempre que uma destas tabelas modificada.

4. Garantindo as Restries de Integridade


Como j visto anteriormente, as RIs so especificadas quando uma relao criada e so checadas sempre que uma relao modificada. O impacto de RIs de domnio, de chave primria e de chave estrangeiras direto. Ou seja, sempre que um comando de insero, excluso ou atualizao causa uma violao de RI, ele rejeitado. Considerando as relaes Students e Enrolled j definidas, sendo stdid uma chave estrangeira em Enrolled que faz referncia a Students. O que deveria ser feito se uma tupla de Enrolled com um id de estudante no existente fosse inserida? Ou ento uma tupla de Students com sid nulo (null)? O sistema deveria apenas rejeit-las. Mas o que deveria ser feito se uma tupla de Student referenciada por Enrolled fosse removida? Neste caso com certeza o sistema estaria violando as restries de integridade referencial. Para evitar isso, a linguagem SQL prov alternativas de tratamento para estas violaes. So elas: rejeitar a remoo da tupla de Students que referenciada por Enrolled; remover tambm todas as tuplas de Enrolled que referenciam a tupla de Students a ser removida; atribuir um valor padro vlido ao stdid das tuplas de Enrolled que referenciam a tupla de Students a ser removida; atribuir o valor null ao stdid das tuplas de Enrolled que referenciam a tupla de Students removida, denotando desconhecido ou no aplicvel; entretanto, como neste exemplo stdid parte da chave primria de Enrolled , esta alternativa estaria violando a RI de chave primria e portanto no poderia ser aplicada.

Estas opes so vlidas tambm para o caso de atualizaes na relao Students. Os comandos em SQL para implementar estas aes so: NO ACTION, que a opo padro e que rejeita a operao sendo executada; CASCADE, que remove a tupla da relao referenciada e todas as tuplas que fazem referncia ela; SET NULL / SET DEFAULT , que atribui um valor chave estrangeira da tupla referenciada.

A seleo da alternativa a ser utilizada feita no momento da especificao da RI. Para o exemplo utilizado, supondo-se que no caso de excluso seja escolhida a segunda alternativa e no caso de atualizao a primeira delas, a criao da tabela Enrolled se daria pelo comando:
CREATE TABLE Enrolled (stdid CHAR(20), cid CHAR(20), grade CHAR(2), PRIMARY KEY (stdid,cid), FOREIGN KEY (stdid) R EFERENCES Students ON DELETE CASCADE ON UPDATE NO ACTION )

4.1. Transaes e Restries Uma transao um programa que executado pelo banco de dados e que pode conter vrios comandos de acesso base de dados, como consultas, inseres, atualizaes, etc. Caso um destes comandos da transao viole algumas das restries de integridade especificadas o tratamento padro rejeitar a sua execuo. Entretanto, esta abordagem algumas vezes pode ser muito inflexvel, devendo ser dado outro tratamento situao. Um exemplo seria, considerando as relaes Enrolled e Students, a situao em que para o estudante ser registrado, ou seja, ter seu id, ele deve estar matriculado em um curso. Entretanto, para o curso existir, deve haver pelo menos um estudante matriculado. Percebe-se pelas restries existentes neste caso, que ao tentar-se inserir a primeira tupla de qualquer das relaes, ocorrer violao e, portanto, as operaes no sero completadas. A nica maneira de conseguir realizar a primeira insero em alguma delas seria postergando a checagem da restrio, que normalmente ocorreria ao final da execuo do comando INSERT. A linguagem SQL permite ento que a checagem de uma restrio possa ser feita em modo imediato (IMMEDIATE) ou postergado (DEFERRED). Para isso usa-se o comando SET, indicando a restrio e o seu modo. Por exemplo o comando SET CONSTRAINT EnrolledKey DEFERRED, faz com que a restrio de nome EnrolledKey definida anteriormente seja checada somente no momento de efetivao (commit ) da transao.

5. Consultando Dados Relacionais


Uma consulta em uma base de dados relacionais, normalmente referenciada como query, uma questo sobre os dados da base, cuja resposta consiste em uma nova relao que contm o resultado na forma de tuplas. Por exemplo, usando as relaes Students e Enrolled, pode-se querer saber quantos estudantes so maiores de 18 anos ou quantos estudantes esto matriculados em um determinado curso. O comando em SQL usado para realizao de consultas o SELECT. Para encontrar todos os estudantes com 18 anos na instncia de relao da Figura 1, executase o comando SELECT * FROM Students S WHERE S.age=18. A relao resposta apresentada na Figura 3:
Sid 53666 53688 Name Login Jones Smith jones@cs smith@eecs age 18 18 gpa 3.4 3.2

Figura 3 Relao resultante de uma consulta

O smbolo * na consulta indica que a relao resultante deve conter todos os atributos existentes na relao consultada. Caso fosse desejado obter apenas o nome e a senha destes estudantes, o comando a ser exeutado seria o descrito abaixo que produziria o resultado ilustrado na Figura 4.
SELECT name, login FROM Students S WHERE S.age=18

Name Login

Jones Smith

jones@cs smith@eecs

Figura 4 Relao resultante de uma consulta

6. Projeto Lgico da Base de Dados: indo do Modelo ER para o Modelo Relacional


O Modelo Entidade Relacionamento (MER) adequado para representar um projeto de banco de dados em alto nvel. Uma vez pronto o esquema da base de dados em MER, preciso converter este esquema para o esquema de banco de dados a ser usado, geralmente no modelo relacional. Para isso, existe um conjunto de regras que direcionam o usurio nesta atividade, tratando, inclusive, restries que no foram cobertas no esquema conceitual. Estas regras sero discutidas a seguir, abrangendo os principais elementos do MER.

6.1. Conjuntos Entidade


Um conjunto entidade (CE) mapeado no modelo relacional com uma relao. Os atributos desta relao sero os mesmos do CE, bem como seus respectivos domnios. Da mesma forma, a chave primria tambm mantida. Como exemplo, considere o CE Employees ilustrado na Figura 5, cujos atributos so ssn, name e lot, sendo ssn a chave primria.
name ssn lot

Employees

Figura 5 CE Employees

O comando SQL para criar a relao correspondente


CREATE TABLE Employees (ssn CHAR(11), name CHAR(20), lot INTEGER, PRIMARY KEY (ssn)).

6.2. Conjuntos Relacionamento


O mapeamento de conjuntos relacionamento (CR) para o modelo relacional pode ser feito de duas maneiras, abordadas a seguir. Conjuntos Relacionamento sem Restries Um conjunto relacionamento (CR) sem restries mapeado numa relao de maneira semelhante ao conjunto entidade. Entretanto, a chave primria de cada entidade envolvida ir compor os atributos da nova relao como chaves estrangeiras, juntamente com os atributos descritivos. A chave primria desta relao ser composta pelas chaves estrangeiras.

name ssn lot

since did

dname budget

Employees

Works_In

Departaments

Figura 6 CR Works_In

Para o exemplo do CR Works_In ilustrado na Figura 6, o seguinte comando SQL ser usado no mapeamento:
CREATE TABLE Works_In( ssn CHAR(11), did INTEGER, since DATE, PRIMARY KEY (ssn, did), FOREIGN KEY (ssn) REFERENCES Employees, FOREIGN KEY (did) REFERENCES Departments)

No caso de auto-relacionamento a relao a ser criada conter 2 ocorrncias da chave primria da entidade envolvida, as quais comporo a chave primria da relao.
name ssn lot

Employees

supervisor

subordinate

Reports_To

Figura 7 CR Reports_To

Assim, o mapeamento do conjunto auto-relacionamento Reports_To ilustrado na Figura 7 para o modelo relacional feito pelo comando:
CREATE TABLE Reports_To(supervisor_ssn CHAR(11), subordinate_ssn CHAR(11), PRIMARY KEY (supervisor_ssn, subordinate_ssn), FOREIGN KEY (supervisor_ssn) REFERENCES Employees (ssn), FOREIGN KEY (subordinate_ssn) REFERENCES Departments(ssn))

Conjuntos Relacionamento com Restries de Chave Existem 2 opes para o mapeamento de CR com restrio de chave para o modelo relacional. A primeira delas semelhante quela j apresentada, criando uma relao para representar o CR, com chaves estrangeiras para as relaes envolvidas. Esta abordagem nem sempre interessante, pois faz com que seja necessria a combinao de relaes para responder s consultas do usurio, podendo se tornar uma atividade lenta. A segunda opo embutir o CR em qualquer das relaes referentes s entidades envolvidas, usando uma chave estrangeira para referenciar a outra entidade. Os atributos descritivos tambm passam a integrar a relao que recebeu o CR. Esta soluo mais vantajosa por permitir a obteno mais rpida de uma resposta. A nica

ressalva que podem ocorrer tuplas nas quais os atributos referentes ao CR estejam vazios.
name ssn lot since did dname budget

Employees

Manages

Departaments

Figura 8 CR Manages

Considerando a segunda opo, o mapeamento do CR Manages da Figura 8 para o modelo relacional feito pelo comando:
CREATE TABLE Dept_Mgr(did INTEGER, dname CHAR(20), budget REAL, ssn CHAR(11), since DATE, PRIMARY KEY (did), FOREIGN KEY (ssn) REFERENCES Employees))

Esta abordagem pode ser aplicada a CR que envolvam mais de 2 CE. Em geral, se o CR envolve N CE e algumas delas tem restrio de chave, o CR pode ser embutido nesta CE. Conjuntos Relacionamento com Restries de Participao A abordagem a mesma que no caso anterior, mas com algumas particularidades. Considerando que no exemplo da Figura 8 existisse uma restrio de participao relacionada ao gerente: todo departamento tem de ter sempre um gerente. O comando a ser utilizado seria:
CREATE TABLE Dept_Mgr(did INTEGER, dname CHAR(20), budget REAL, ssn CHAR(11) NOT NULL, since DATE, PRIMARY KEY (did), FOREIGN KEY (ssn) REFERENCES Employees ON DELETE NO ACTION)

Neste caso a restrio de participao garantida pelo NOT NULL usado no atributo ssn indicando que ele no pode assumir valores null. Ou seja, que ele tem sempre um valor associado. J o comando NO ACTION, que padro, garante que o empregado no pode ser excludo da relao de empregados, se ele estiver como gerente do departamento.

6.3. Conjuntos de Entidades Fracas


O conjunto de entidades fracas tem sempre participao binria do tipo 1:N, bem como uma restrio de chave e uma de participao total. Levando-se isso em conta, a abordagem utilizada nos casos anteriores ideal. Entretanto, por se tratar de uma entidade dependente de outra, tem chave do tipo parcial.
name ssn lot custo pname age

Employees

Policy

Dependents

Figura 9 Conjunto Entidade Fraca

Para o exemplo de conjunto entidade fraca ilustrado na Figura 9 o mapeamento para o modelo relacional seria feito por meio do comando:
CREATE TABLE Dept_Policy(pname CHAR(20), age INTEGER, cost REAL, ssn CHAR(11), PRIMARY KEY (pname, ssn), FOREIGN KEY (ssn) REFERENCES Employees ON DELETE CASCADE)

Note que neste caso, a chave da relao passou a ser composta pela chave primria da entidade fraca (pname) e pela chave primria da relao que a contm (ssn, em Employees), sendo esta ltima tambm uma chave estrangeira. O comando CASCADE, garante que se o empregado for excludo da relao Employees, todos os seus dependentes tambm o sero. 6.4.Traduzindo Hierarquias de Classe Semelhante ao que ocorre com os CR, existem 2 abordagens para tratar as hierarquias ISA. Na primeira delas, deve ser criada, alm da relao referente super entidade, uma relao para cada especializao do CE, mantendo seus atributos e acrescentando uma chave estrangeira que referencia a super entidade. A chave estrangeira desta relao tambm a sua chave primria. Caso a relao correspondente super entidade seja removida, as relaes das entidades especializadas tambm devem ser removidas, usando para isso o comando CASCADE. A segunda abordagem sugere criar uma relao para cada especializao do CE, mas no para a super entidade. Neste caso cada relao criada conter, alm dos seus atributos, os atributos da super entidade. A primeira abordagem mais genrica e tambm a mais usada. Sua principal vantagem permitir que a relao referente super classe seja utilizada independente das relaes referentes s entidades especializadas. J a segunda abordagem obriga que a informao seja sempre obtida a partir de uma das entidades especializadas, no permitindo a existncia da super classe. 6.5. Traduzindo diagramas ER com Agregao Neste casos o mapeamento simples e semelhante queles discutidos anteriormente: o CR da agregao traduzido em uma nova relao, sendo sua chave primria composta pela chave primria dos CE envolvidos. Da mesma forma, o CR que envolve esta agregao tambm traduzido em uma nova relao, que ter dentre seus atributos a chave primria da relao que representa a agregao.

7. Vises
A viso uma tabela cujas linhas no so explicitamente armazenadas na base de dados, mas sim computadas, quando necessrio, a partir de uma definio em termos de tabelas da base de dados, denominada tabelas base. O comando em SQL usado para isso o CREATE VIEW. Considere as relaes Students e Enrolled discutidas anteriormente. Suponha que exista um interesse constante em recuperar o nome e o identificador dos estudantes que tem nota B em algum curso e tambm o identificador deste curso. Uma viso pode

ser utilizada neste caso, sem que seja necessria a criao de uma tabela para isso. Ento para o exemplo descrito poderia ser usado o comando:
CREATE VIEW B-Students (name, sid, course) AS SELECT S.sname, S.sid, E.cid FROM Students S, Enrolled E WHERE S.sid = E.sid AND E.grade = 'B'

A viso definida neste caso composta por 3 campos (name, sid e course) cujos domnios correspondem aos mesmos das relaes Students (name e sid) e Enrolled (course).

7.1. Vises, Independncia de Dados e Segurana


O mecanismo de vises prov uma independncia lgica dos dados no modelo relacional. Ela pode ser usada para definir relaes em um esquema externo que mascare mudanas ocorridas no esquema conceitual da base de dados das aplicaes. Por exemplo, se o esquema de uma dada relao for alterado, pode ser definida uma viso que represente o esquema antigo, permitindo que aplicaes continuem executando normalmente sem grandes modificaes. Vises tambm so muito teis no contexto de segurana. Com elas possvel permitir que determinados grupos de usurios acessem somente os dados que eles tem permisso para uso. Por exemplo, permitir que estudantes vejam apenas o nome e login de outros estudantes, mas no sua senha ou sua nota em um curso.

7.2. Atualizaes em Vises


Uma das vantagens do uso de vises permitir o gerenciamento da apresentao do dados aos usurios, sem que eles tenham de se preocupar com a maneira como eles esto fisicamente armazenados na base de dados. Isto normalmente funciona adequadamente, j que a viso pode ser usada exatamente como uma relao, permitindo a definio de consultas sobre os dados que a compem. Esta vantagem acaba levando a uma restrio, pois como se tambm se trata de uma relao, natural o desejo de atualizao os seus dados. Entretanto, como a viso uma tabela virtual, a sua atualizao deve incidir sobre a tabela base, o que nem sempre possvel, devido a problemas como ambigidade e restries de integridade. Necessidade de Restringir Atualizaes de Vises possvel atualizar ou inserir uma linha em uma viso. No entanto, nem sempre esta atualizao far parte dela. Isto ocorre porque na verdade a execuo destes comandos promovem uma atualizao ou insero nas tabelas base e dependendo da condio estabelecida na definio da viso, a linha pode no ser selecionada para compor a tabela virtual, no refletindo a alterao feita. Assim, por questes prticas, a linguagem SQL permite a atualizao de vises apenas em casos muito especficos, no permitindo, por exemplo, a atualizao de colunas calculadas, de vises compostas por agregados de linhas ou geradas a partir de junes.

7.3. Destruindo e Alterando Vises


Uma viso, de maneira semelhante ao que ocorre com as relaes, tambm pode ser removida do banco de dados. O comando em SQL utilizado para isso o DROP VIEW.

Note que a remoo de uma relao tambm pode levar remoo de uma viso caso tenha sido usado algum comando que estabelea esta restrio, como o CASCADE. J o comando RESTRICT evita que uma relao seja excluda quando da existncia de uma viso associada a ela.

Referncias Utilizadas
Ramarkrishnan, R. and Gehrke, J. (2003) Data Management Systems, McGraw-Hill, 3rd edition. Guimares, C. C. (2003) Fundamentos de banco de dados: modelagem, projeto e linguagem SQL, Editora da Unicamp.

Вам также может понравиться