Migração de um Esquema Relacional para o banco de dados Cassandra
Modelo de Dados Relacional. Introdução O modelo relacional representa um banco de dados como um...
Transcript of Modelo de Dados Relacional. Introdução O modelo relacional representa um banco de dados como um...
Modelo de Dados Relacional
Introdução O modelo relacional representa um banco
de dados como um conjunto de relações
Informalmente, uma relação é uma tabela de valores, onde cada linha representa uma coleção de dados relacionados
Cada linha de uma tabela representa um “fato” que tipicamente corresponde a uma entidade ou relacionamento do mundo real
Conceitos Básicos As linhas de uma relação (tabela) são
chamadas de tuplas Ao cabeçalho de cada coluna dá-se o nome
de atributo O conjunto de valores que pode aparecer em
cada coluna é chamado de domínio
Conceitos Básicos Esquema de relação
Descreve a relação R(A1,A2, ...,An), onde:
R Nome da relação Ai Nome de um atributo n Grau da relação Cada Atributo Ai e’ o nome de um papel
desempenhado por algum dominio D no Esquema da relação R
Exemplo: Student(Name, SSN, HomePhone, Address,
OfficePhine, Age,GPA)
Conceitos Básicos Relação r(R)
Conjunto de tuplas: r = {t1,t2, ..., tm} Cada tupla é uma lista ordenada de
valores: t = <v1,v2, ..., vn>
Características de uma Relação As tuplas de uma relação não são
ordenadas
Registros em um arquivo são ordenados de acordo com a posição em que são armazenados no disco
Benjamin Bayer 305-61-2425 373-1616 2918 Bluebonnet Lane null 19 3.21
Características de uma Relação
Uma tupla é uma lista ordenada de valores O valor de cada atributo em uma tupla é
atômico Atributos compostos e multivalorados não são
permitidos O valor especial null é utilizado para representar
valores não conhecidos ou não aplicáveis a uma determinada tupla
Restrições de Integridade Restrições de domínio
Especificam que o valor de cada atributo A de uma relação deve ser um valor atômico do domínio dom(A)
Restrições de chave Por definição todas as tuplas sao distintas Um conjunto de atributos SK de um esquema de
relação R tal que, para duas tuplas quaisquer t1 e t2 de r(R), t1[SK] t2[SK] é uma super-chave de R
Super-chave default: todos os atributos Uma chave de R é uma super-chave com a
propriedade adicional de que nenhum de seus subconjuntos também seja uma super-chave de R
{SSN,Name,Age} = super-chave; {SSN} = chave
Restrições de Integridade Restrições de chave
Um esquema de relação pode ter mais de uma chave chaves candidatas
Dentre as chaves candidatas de um esquema de relação, uma delas é indicada como chave primária e as demais constituem as chaves alternativas
Restrições de Integridade Restrições em valores null
Especifica se a um atributo é permitido ter valores null
Exemplo. Todo Estudante deve ter um nome válido, não-null
Esquema de um BD Relacional
Restrições de Integridade Além das restrições de domínio e de
chave as seguintes restrições de integridade são parte do modelo relacional: Restrição de integridade de entidade
Nenhum componente de uma chave primária pode ser nulo
Restrições de Integridade Restrição de integridade referencial
Usada para manter a consistencia entre tuplas de duas relacoes
Uma tupla em uma relação que se refere a outra relação deve referenciar uma tupla existente nesta outra relação
Aparecem devido aos relacionamentos entre entidades
Seja FK um conjunto de atributos de um esquema de relação R1 definido sobre o mesmo domínio dos atributos da chave primária PK de outro esquema R2. Então, para qualquer tupla t1 de R1:
t1[FK] = t2[PK], onde t2 é uma tupla de R2 ou t1[FK] é nulo
Restrições de integridade referencial
A restrição de integridade referencial pode ser expressa pela notação
R1[FK] R2[PK],
onde PK é a chave primária de R2 e FK é a chave estrangeira de R1
Exemplos:
EMPLOYEE[DNO] DEPARTMENT[DNUMBER]
WORKS_ON[ESSN] EMPLOYEE[SSN]WORKS_ON[PNO] PROJECT[PNUMBER]
Restrições de Integridade
Instância de um BD Relacional
1
4
5
5
5 Houston
Instância de um BD Relacional
Opções de Remoção da RIR A cada RIR R1[FK] R2[PK] é possível associar
uma opção de remoção que especifica como a remoção de uma tupla de R2 é executada em relação a R1
As opções de remoção possíveis são: bloqueio propagação substituição por nulos
Notação: R1[FK] R2[PK],
onde op {b, p, n}
op
Exemplos de RIR
EMPLOYEE(FNAME,MINT,LNAME,SSN,BDATE,ADDRESS,SEX, SALARY,SUPERSSN,DNO)
EMPLOYEE[SUPERSSN] EMPLOYEE[SSN]
EMPLOYEE[DNO] DEPARTMENT[DNUMBER]
DEPARTMENT[DNAME,DNUMBER,MGRSSN,MGRDATE]
DEPARTMENT[MGRSSN] EMPLOYEE[SSN]
DEPT_LOCATIONS(DNUMBER,LOCATION)
DEPT_LOCATIONS[DNUMBER] DEPARTMENT[DNUMBER]
n
b
b
p
Restrições de integridade referencial com opções de remoção
n
p
p
bb
bb
b
Operações sobre Relações
As operações sobre um BD relacional podem ser classificadas em: Operações de recuperação (consulta) Operações de atualização
Operações de atualização (sobre tuplas): Inserção (insert) Remoção (delete) Modificação (modify)
Operações sobre Relações Operações de atualização
Restrições de integridade não podem ser violadas
Inserção Restrição de Dominio: valor fora do dominio Restrição de Chave: valor ja’ existe Restrição de integridade de entidade: se chave for
null Restrição de integridade referencial: se chave
estrangeira referencia tupla inexistente Ação default: rejeitar inserção (com explicação)
Operações sobre Relações Operações de atualização
Restrições de integridade não podem ser violadas
Remoção Restrição de integridade referencial: tupla deletada
e’ referenciada por chaves estrangeiras Ação default: rejeitar inserção (com explicação) Segunda opção: propagar remoção de tuplas que
violem uma restrição de integridade referencial Terceira Opcao: Modificar o valor da chave
estrangeira para nulo
Operações sobre Relações Operações de atualização
Restrições de integridade não podem ser violadas
Modificação Modificar o valor de um atributo que nao e’ chave
primaria ou estrangeira não causa problemas (se o valor for do dominio, e, se for null, que este valor seja permitido)
Modificar a chave primaria e’ igual a remover uma tupla e inserir outra
Modificar chave estrangeira: SGBD deve verificar se novo valor do atributo referencia tupla existente
A Linguagem SQL
Introdução Originalmente proposta para o System R
desenvolvido nos laboratórios da IBM na década de 70 SEQUEL (Structured English QUEry Language)
Objeto de um esforço de padronização coordenado pelo ANSI/ISO: SQL1 (SQL-86) SQL2 (SQL-92) SQL3 (SQL:1999)
Introdução SQL = LDD + LMD + LCD Principais comandos:
LDD: CREATE SCHEMA / TABLE / VIEW DROP SCHEMA / TABLE / VIEW ALTER TABLE
LMD: SELECT, INSERT, UPDATE, DELETE
LCD: GRANT, REVOKE
Conceitos: Table = Relação Row = tupla Column = atributo
Definição de Dados em SQL Comando CREATE SCHEMA
CREATE SCHEMA COMPANY AUTHORIZATION JS;
Comando CREATE TABLE CREATE TABLE <nome da tabela>
(<definições de colunas> <definição da chave primária> <definições de chaves alternativas> <definições de chaves estrangeiras>);
Definição de Dados em SQL Exemplo de um comando CREATE TABLECREATE TABLE EMPLOYEE
(FNAME VARCHAR(15) NOT NULL, MINIT CHAR, LNAME VARCHAR(15) NOT NULL, SSN CHAR(9) NOT NULL, … SUPERSSN CHAR(9), DNO INT NOT NULL, PRIMARY KEY (SSN), FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE (SSN) ON DELETE SET NULL, FOREIGN KEY (DNO) REFERENCES DEPARTMENT (DNUMBER));
Definição de Dados em SQL Opções de remoção (cláusula ON DELETE):
CASCADE (propagação) SET NULL (substituição por nulos) SET DEFAULT (substituição por um valor default) Opção default: bloqueio (RESTRICT)
As mesmas opções se aplicam à cláusula ON UPDATE
Restrição de Integridade Referencial em SQL
FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE(SSN)ON DELETE SET NULL
FOREIGN KEY (DNO) REFERENCES DEPARTMENT(DNUMBER)
FOREIGN KEY (DNUM) REFERENCES DEPARTMENT(DNUMBER)
FOREIGN KEY (ESSN) REFERENCES EMPLOYEE(SSN) FOREIGN KEY (PNO) REFERENCES PROJECT(PNUMBER)
FOREIGN KEY (ESSN) REFERENCES EMPLOYEE(SSN)ON DELETE CASCADE
FOREIGN KEY (DNUMBER) REFERENCES DEPARTMENT(DNUMBER)ON DELETE CASCADE
FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE(SSN)
Restrição de Integridade Referencial em SQL
Definição de Dados em SQL Comandos DROP SCHEMA e DROP TABLE
DROP SCHEMA COMPANY CASCADE (RESTRICT);
RESTRICT: APENAS SE NAO TEM ELEMENTOS DROP TABLE DEPENDENT CASCADE
(RESTRICT); RESTRICT: SE A TABELA NAO E’ REFERENCIADA EM
QUALQUER RESTRICAO
Comando ALTER TABLE ALTER TABLE COMPANY.EMPLOYEE
ADD JOB VARCHAR(12); Inicialmente Null para todas as tuplas
ALTER TABLE COMPANY.EMPLOYEE DROP ADDRESS CASCADE (RESTRICT);
RESTRICT: SE NENHUMA VISAO OU RESTRICAO REFERENCIA A COLUNA
Consultas Básicas em SQL Formato básico do comando SELECT:
SELECT <lista de atributos> FROM <lista de tabelas>
WHERE <condição>; Exemplo: SELECT BDATE, ADDRESS
FROM EMPLOYEEWHERE FNAME=‘John’ AND MINIT=‘B’ AND LNAME=‘Smith’;
Consultas Básicas em SQL SELECT FNAME, LNAME, ADDRESS
FROM EMPLOYEE, DEPARTMENTWHERE DNAME=‘Research’ AND DNO=DNUMBER;
SELECT PNUMBER, DNUM, LNAME, ADDRESS, BDATE FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE PLOCATION=‘Stafford’ AND DNUM=DNUMBER AND MGRSSN=SSN;
condição de seleção
condição de junção
Consultas Básicas em SQL Atributos ambíguos e pseudônimos (alias)
SELECT DNAME, DLOCATIONFROM DEPARTMENT, DEPT_LOCATIONSWHERE DEPARTMENT.DNUMBER =
DEPT_LOCATIONS.DNUMBER;
SELECT E.FNAME, E.LNAME, S.FNAME, S.LNAMEFROM EMPLOYEE AS E, EMPLOYEE AS SWHERE E.SUPERSSN=S.SSN;
Consultas Básicas em SQL Consultas sem a cláusula WHERE
SELECT SSN, LNAME, SALARYFROM EMPLOYEE;
SELECT LNAME, DNAMEFROM EMPLOYEE, DEPARTMENT
Atenção! Esta consulta corresponde a um produto cartesiano das tabelas EMPLOYEE e DEPARTMENT
WHERE DNO=DNUMBER;
Consultas Básicas em SQL Manipulando tabelas como conjuntosSELECT SALARY FROM EMPLOYEE;
SELECT DISTINCT SALARYFROM EMPLOYEE;
(SELECT PNUMBER FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE DNUM=DNUMBER AND MGRSSN=SSN AND
LNAME=‘Smith’) UNION(SELECT PNUMBER FROM PROJECT, WORKS_ON, EMPLOYEE WHERE PNUMBER=PNO AND ESSN=SSN AND LNAME=‘Smith’);
Não elimina linhas (tuplas) duplicatas
Consultas Complexas em SQL Consultas aninhadasSELECT FNAME, LNAME, ADDRESSFROM EMPLOYEEWHERE DNO IN (SELECT DNUMBER
FROM DEPARTMENT WHERE DNAME=‘Research’);
é equivalente à consulta
SELECT FNAME, LNAME, ADDRESSFROM EMPLOYEE, DEPARTMENTWHERE DNO=DNUMBER AND DNAME=‘Research’;
Consultas Complexas em SQL Comparação de conjuntos
SELECT DISTINCT PNUMBERFROM PROJECTWHERE PNUMBER IN (SELECT PNUMBER
FROM PROJECT, DEPARTMENT, EMPLOYEE
WHERE DNUM =DNUMEBR AND
MGRSSN=SSN AND LNAME=‘Smith’) OR
PNUMBER IN (SELECT PNO FROM WORKS_ON, EMPLOYEE WHERE ESSN=SSN AND LNAME=‘Smith’);
Consultas Complexas em SQL Comparação de conjuntos
SELECT DISTINCT ESSNFROM WORKS_ONWHERE (PNO, HOURS) IN (SELECT PNO, HOURS
FROM WORKS_ON WHERE
ESSN=‘123456789’);SELECT LNAME, FNAMEFROM EMPLOYEEWHERE SALARY > ALL (SELECT SALARY
FROM EMPLOYEE WHERE DNO=5);
Consultas Complexas em SQL Uso da função EXISTS
SELECT E.FNAME, E.LNAMEFROM EMPLOYEE AS EWHERE EXISTS (SELECT *
FROM DEPENDENTWHERE E.SSN=ESSN AND
E.SEX=SEX AND E.FNAME=DEPENDENT_NAME);
SELECT FNAME, LNAMEFROM EMPLOYEE WHERE NOT EXISTS (SELECT *
FROM DEPENDENT WHERE SSN=ESSN);
Consultas Complexas em SQL Uso do operador CONTAINS
SELECT FNAME, LNAMEFROM EMPLOYEE WHERE ((SELECT PNO
FROM WORKS_ON WHERE SSN=ESSN)
CONTAINS (SELECT PNUMBER FROM PROJECT
WHERE DNUM=5));
Facilidades Adicionais Uso do operador JOIN
SELECT FNAME, LNAME, ADDRESSFROM (EMPLOYEE JOIN DEPARTMENT ON DNO=DNUMEBR)WHERE DNAME=‘Research’;
SELECT DNAME, DLOCATIONFROM (DEPARTMENT NATURAL JOIN DEPT_LOCATIONS);
SELECT FNAME, LNAME, DEPENDENT_NAMEFROM (EMPLOYEE LEFT OUTER JOIN DEPENDENT ON SSN=ESSN);
Facilidades Adicionais Agrupamento
SELECT DNO, COUNT(*), AVG(SALARY)FROM EMPLOYEEGROUP BY DNO;
Facilidades Adicionais Agrupamento com a cláusula HAVING
SELECT PNUMBER, PNAME, COUNT(*)FROM PROJECT, WORKS_ONWHERE PNUMBER=PNOGROUP BY PNUMBER, PNAMEHAVING COUNT(*) > 2;
3333
Atualizações em SQL Comando INSERT
INSERT INTO EMPLOYEEVALUES (‘Richard’,‘K’,‘Marini’,‘653258653’,‘1962-12-30’, ’98 Oak Forest, Katy, TX’,37000,’987654321’,4);
INSERT INTO EMPLOYEE(FNAME, LNAME, SSN, DNO)VALUES (‘Richard’,‘Marini’,‘653258653’,4);
INSERT INTO EMPLOYEE(FNAME, LNAME, SSN, DNO)SELECT * FROM INPUT;
Atualizações em SQL Comando DELETE
DELETE FROM EMPLOYEEWHERE LNAME=‘Brown’;
DELETE FROM EMPLOYEEWHERE DNO IN (SELECT DNUMBER FROM DEPARTMENT
WHERE DNAME=‘Research’);
DELETE FROM EMPLOYEE;
Atualizações em SQL Comando UPDATE
UPDATE PROJECTSET PLOCATION=‘Bellaire’, DNUM=5WHERE PNUMBER=10;
UPDATE EMPLOYEESET SALARY=SALARY*1.1WHERE DNO IN (SELECT DNUMBER
FROM DEPARTMENT WHERE
DNAME=‘Research’);
Projeto Lógico de Bancos de Dados Relacionais
Tópicos
Processo de Projeto de Bancos de Dados Exemplo Preliminar Representação Relacional de Esquemas ER Implementação Usando SQL Referências Bibliográficas
Processo de Projeto de Bancos de Dados
Caracterização Complexidade Multiplicidade de tarefas
Fases Coleção e análise de requisitos Projeto conceitual Escolha de um sistema gerenciador de banco de
dados Projeto lógico (ou mapeamento para o modelo
de dados do SGBD escolhido) Projeto físico Implementação e “tuning”
Fases do Processo de Projeto de Bancos de Dados
Mini-Mundo
Análise deRequisitos
Requisitos do BD
Projeto Conceitual
Esquema Conceitual
(em um modelo de dados de alto nível)
Projeto Lógico
Esquema Lógico(em um modelo de dados lógico)
Projeto Físico
Esquema Físico(para um SGBD específico)
Requisitos Funcionais
Análise Funcional
Especificação das Transações(em alto nível)
Projeto das Aplicações
Implementação
Programas
Independente de SGBD
Específico para um SGBD
Abordagem ER para Projeto Lógico de Bancos de DadosRelacionais
Mini-Mundo
Análise deRequisitos
Requisitos do BD
Projeto Conceitual
Esquema Conceitual
(em um modelo de dados de alto nível)
Projeto Lógico
Esquema Lógico(em um modelo de dados
lógico)
Projeto Físico
Esquema Físico(para um SGBD específico)
Requisitos Funcionais
Análise Funcional
Especificação das Transações(em alto nível)
Projeto das Aplicações
Implementação
Programas
Independente de SGBD
Específico para um SGBD
Modelo ER
ModeloRelacional
SGBDRelacional
Aplicação exemplo
Banco de Dados de uma companhia Organizada em departamentos que têm um
nome e um número únicos e um empregado que gerencia o departamento. A data de quando o empregado começou a gerenciar o departamento deve ser registrada. Um departamento pode ter varias localizações
Um departamento controla um número de projetos, cada qual com um nome e número únicos e uma única localização
Aplicação exemplo Banco de Dados de uma companhia
Nós armazenamos para cada empregado seu nome, identidade, endereço, salário, sexo, e data de nascimento. Um empregado e’ assinalado a um departamento mas pode trabalhar em diversos projetos, os quais não são necessariamente controlados pelo mesmo departamento. Nos registramos o número de horas por semana que o empregado trabalha em cada projeto e o supervisor direto de cada empregado
Nós mantemos registro para cada empregado, do numero de dependentes (para seguro) e para cada dependente o primeiro nome, sexo, data de nascimento e relacionamento com o empregado.
M
EMPLOYEE[SUPERSSN] EMPLOYEE[SSN]
EMPLOYEE[DNO] DEPARTMENT[DNUMBER]
DEPARTMENT[MGRSSN] EMPLOYEE[SSN]
DEPT_LOCATIONS[DNUMBER] DEPARTMENT[DNUMBER]
PROJECT[DNUM] DEPARTMENT[DNUMBER]
WORKS_ON[ESSN] EMPLOYEE[SSN]
WORKS_ON[PNO] PROJECT[PNUMBER]
DEPENDENT[ESSN] EMPLOYEE[SSN]
n
b
b
b
b
b
p
p
Representação Relacional de Esquemas ER
Estratégias de representação Mapeamento 1-1: cada tipo de entidade ou de
relacionamento é representado por um esquema de relação separado
Mapeamento otimizado: tipos de relacionamento funcionais (1:1 e N:1) e subtipos de entidade são colapsados e representados através de atributos em outro esquema de relação
Modelo RelacionalNotação
Esquema de relação R (A1,A2,…,An), onde A1 é a chave primária de R
Restrição de integridade referencial R1 [X] R2 [Y], onde X é um conjunto de
atributos de R1 que referencia a chave Y de R2
Restrições estruturais <expr1> op <expr2>, onde <expr1> e <expr2>
são expressões da álgebra relacional e op é um dos operadores , , ou
Exemplo de um Diagrama ER
Empregado
ProjetoDependente
Departamento
Trabalha-para
Gerencia
Participa-de
Controla
N 1
1 11 1
N NN
M
NEmp NomeEmp Salário
NomeDep DataNasc
NDept NomeDept Ramal
NProj NomeProj LocalHsTrab
Possui
Representação de Tipos de Entidade (sem atributos multivalorados)
Empregado
NEmp
NomeEmp
Salário
Empregado (NEmp(nn),NomeEmp,Salário)
Representação de Tipos de Entidade (com atributos multivalorados)
Departamento
NDept
NomeDept
Ramal
Departamento (NDept(nn),NomeDept)
Ramal-Departamento (NDept(nn), Ramal(nn))
Ramal-Departamento [NDept] Departamento [NDept]p
Representação de Tipos de Entidade Fraca
Empregado (NEmp(nn),...)
Dependente (NEmp(nn),NomeDep(nn), DataNasc)
Dependente [NEmp] Empregado [NEmp]p
Empregado Dependente1 N
NEmp NomeDep DataNasc
Possui
Representação de Tipos de Relacionamento N:1(mapeamento 1-1)
Empregado Departamento1N
NEmp NDept
Trabalha-para
Empregado (NEmp(nn),...)
Departamento (NDept(nn),...)
Trabalha-para [NEmp] Empregado [NEmp]p
Trabalha-para (NEmp(nn),NDept(nn))
Trabalha-para [NDept] Departamento [NDept]b
NEmp(Empregado) = NEmp(Trabalha-para)
Representação de Tipos de Relacionamento N:1(mapeamento otimizado)
Empregado Departamento1N
NEmp NDept
Trabalha-para
Empregado (NEmp(nn),...,NDept(nn))
Departamento (NDept(nn),...)
Empregado [NDept] Departamento [NDept]b
Representação de Tipos de Relacionamento 1:1(mapeamento otimizado)
Empregado Departamento11
NEmp NDept
Gerencia
Empregado (NEmp(nn),...)
Departamento (NDept(nn),...,NEmp(nn))
Departamento [NEmp] Empregado [NEmp]b
Chave alternativa
Representação de Tipos de Relacionamento M:N
Empregado ProjetoNM
NEmp NProj
Participa-de
HsTrab
Empregado (NEmp(nn),...)
Projeto (NProj(nn), ...)
Participa-de [NEmp] Empregado [NEmp]
Participa-de (NEmp(nn),NProj(nn), HsTrab)
Participa-de [NProj] Projeto [NProj]
p
p
Implementação usando SQL
SQL Composta de três sublinguagens: LDD, LMD e
LCD Objeto de padronização pelo ANSI/ISO
Comando básico de definição de dados:create table <table name> (<column definitions> <primary key definition> <alternate key definitions> <foreign key definitions>)
Definição de um Esquema de Relação em SQL
create table Empregado
(NEmp char(3) not null, NomeEmp char(30) not null, Salario decimal(6,2), NDept char(2) not null, primary key (NEmp), foreign key (NDept) references
Departamento)
Restrições de Integridade em SQL
Restrições de unicidade (unique constraints) que indicam a chave primária e as chaves alternativas de uma tabela
Restrições de integridade referencial (referential constraints) que especificam as chaves estrangei-ras de uma tabela
Restrições de verificação (check constraints) que especificam condições que devem ser satisfeitas por coluna/linhas de uma tabela ou entre tabelas
Restrições de Unicidade
Chave primária primary key (<attribute list>) Chaves alternativas unique (<attribute list>)
create table Departamento ( ...
primary key (NDept), unique (NomeDept), ...)
Restrições de Integridade Referencial
foreign key (<attribute list>)references <table name> [(<attribute list>)][on delete cascade | set null | set default][on update cascade | set null | set default]
create table Participa-de
(... foreign key NEmp references Empregado
on delete cascade)
Referências Batini, C.; Ceri, S.; Navathe, S.B. Conceptual Database Design: An
Entity-Relationship Approach. Benjamin/Cummings, Redwood City, CA, 1992.
Elmasri, R.; Navathe, S.B. Fundamentals of Database Systems, 3rd ed., Addison-Wesley, MA, 2000.
Laender, A.H.F.; Casanova, M.A.; Carvalho, A.P.; Ridolfi, L.F. An Analysis of SQL Integrity Constraints from an Entity-Relationship Model Perspective. Information Systems 4, 3(1994), 423-464.
Silva, A.S.; Laender, A.H.F.; Casanova, M.A. An Approach to Maintaining Optimizing Relational Representations of Entity-Relationship Schemas. In Thalheim, B. (ed.). Conceptual Modeling -ER’96. Springer-Verlag, Berlin, 1996, pp. 242-256.
Silva, A.S.; Laender, A.H.F.; Casanova, M.A. On the Relational Representation of Specialization Structures. Information Systems 25, 6(2000), 399-415.