"The most important motivation for the research work that culminated in the relational model
was the goal of drawing a clear and sharp boundary between the logical and physical
between the logical and physical aspects of database management.
database management" (Edgar Frank Codd).
The Relational Paradigm
The concept of relationship
The relational model, developed by Edgar Frank Codd [1970], is based on elements called "relations". A relation is a two-dimensional table. The horizontal dimension corresponds to different entities. The vertical dimension corresponds to a set of attributes of those entities. For example, the relation Employees, which corresponds to a set of employees of a company expressed as a table, where the rows are the employees, and the columns are attributes of those employees:
Employee
Name
Surname1
Surname2
City
E001
Juan
Pérez
Gómez
Madrid
E002
Luis
Fernández
Pin
Barcelona
E003
Pedro
Ruiz
Llamas
Valencia
E004
Ramón
Ruiz
Rodríguez
Alicante
Formally, a relation R defined over the attributes A1, ... , Am of a certain class of entities is a subset of the Cartesian product of the domains of those attributes.
R ⊆ Dom(A1) ×…× Dom(Am)
where Dom(Ai) is the set of possible values of attribute Ai.
This relationship can be represented as the generic two-dimensional table:
Entity
Attributes
A1
...
Am
1
V11
...
V1m
...
...
...
...
n
Vn1
...
Vnm
being:
Ai = attribute i.
Vij = value in entity i of attribute j.
n = cardinality of the relation (number of rows or tuples).
m = degree of the relation (number of attributes).
A relation is thus a set of tuples.
The order of the tuples in a relation is irrelevant, since each row corresponds to a different entity. The order of the columns is also irrelevant, since each column has the name of the corresponding attribute associated with it.
In a relationship, a key or primary (or, simply, key) attribute is an attribute whose value is unique for each entity. In the case of the relationship Employees, the key is Employee. The key of a relation could also be a concatenation of attributes (we speak, in this case, of a composite key or superkey).
A set of relationships (tables), interrelated through common attributes, constitutes a relational database (RDB). For example, in addition to the previous table (Employees), there could be another table of Cities with different attributes (Population, etc.). Both tables would be implicitly linked through the common attribute City. For example,
City
Population (millions)
Madrid
5
Barcelona
3
Valencia
2
Sevilla
1
Note that Alicante does not appear in this table (which did appear in the Employees table), but Seville appears.
An attribute of a relation that is not a key in one relation can be a key in another. For example, the attribute City is not key to the relationship Employees, but it is key to the relationship Cities. It is said that City is a foreign key (foreign) in Employees.
A value Null (null) means that the value is unknown or does not exist. All operations involving Null are false by definition.
A value is atomic if it cannot be subdivided into smaller values. For example, a person's age in years is an atomic value. The concept of atomicity is relative, since a value can be considered atomic or composite, depending on the purpose.
Relational algebra
The relational model is based on a set of basic operations, which constitute the so-called "relational algebra". This is a set of operations that act on relations and produce a relation as a result. The basic operations are 5:
3 dyadic operations: two from set theory (union and difference) and a variant of the Cartesian product.
2 monadic operations (selection and projection).
Union of two relations R1 and R2.
R1∪R2 = set of tuples belonging to R1, to R, or to both.
The relationships R1 and R2 must be compatible, i.e., they must be defined on the same set of attributes.
Difference of two relations R1 and R2.
R1− R2 = set of tuples of R1 that do not belong to R2.
As above, the relationships must be compatible.
Cartesian product of two relations R1 (of degree m1) and R2 (of degree m2).
R1×R2 = set of all possible tuples in which the m1 first elements constitute a tuple of R1 and the m2 last ones a tuple of R2. That is, each of the rows of R1 are concatenated with each of the rows of R2. The new relation is of degree m1+m2 and of cardinality m1×m2.
This definition is a variant of the classical Cartesian product.
Projection of a relation R.
It is a selection of table columns.
If A is the set of attributes on which the relationship R is defined and B⊂A is a subset of A (a selection of columns), Π B(R) is another relation with the same tuples as R, but considering only the attributes specified in B and eliminating duplicate tuples.
For example,
Π{FirstName, LastName1}(Employees)
produces a new relation with only the columns corresponding to the specified attributes (FirstName and LastName1) and eliminating duplicate tuples.
Name
Surname1
Juan
Pérez
Luis
Fernández
Pedro
Ruiz
Ramón
Ruiz
Selection of a R relationship.
Is another relation in which the tuples of R that meet a selection criterion F are selected. The notation is σF(R).
The selection criterion F is defined by a formula constructed with operands (attribute names or constants), comparison operators (>, <, etc.) and classical logical operators (or, and, not: ∨, ∧, ¬).
For example,
σLastName1=Ruiz(Employees)
produces a two-row relationship:
Employee
Name
Apellido1
Surname2
City
E003
Pedro
Ruiz
Llamas
Valencia
E004
Ramón
Ruiz
Rodríguez
Alicante
Another example would be σ(LastName1=Ruiz ∧ City=Barcelona)(Employees) which would produce the empty relation (the empty set).
This set of basic operations is shown to be complete [Codd, 1972], and these operations can be combined to construct derived operations.
Derived operations
In order to facilitate the specification of relational algebra expressions, 7 additional derived operations are defined [Korth & Silberschatz, 1993], (which together with the 5 basic ones, give a total of 12 operations):
Intersection of two relations R1 and R2.
The relationships R1 and R2 must be compatible. The intersection is equivalent to the operation defined in set theory. It is defined from the basic operation difference:
R1∩R2 = R1 − (R1 − R2)
natural join (natural join) of two relations R1 and R1, symbolized by R1 |×| R2).
It is a column-level concatenation based on equal values in common columns. It has the form σF(R1×R2) where F is a formula indicating those equal values in common columns.
For example, the natural union of Employees |×| Cities produces the following table:
Employee
Name
Surname1
Surname2
City
Population
E001
Juan
Pérez
Gómez
Madrid
5
E002
Luis
Fernández
Pin
Barcelona
3
E003
Pedro
Ruiz
Llamas
Valencia
2
Note that employee E004 does not appear because Alicante is not in Cities.
Outer Join (Outer Join).
It is an extension of the natural join that avoids loss of information. Non-existing values are assigned the value Null (null). There are three types:
R1 ]×| R2 (left outer bond).
The rows of the first operand are taken into account.
R1 |×[ R2 (right outer join).
The rows of the second operand are taken into account.
R1 ]×[ R2 (outer join complete).
The rows of both operands are taken into account.
In the case of Employees and Cities, we have:
Employees ]×| Cities:
Employee
FirstName
LastName1
LastName2
City
Population millions)
E001
Juan
Pérez
Gómez
Madrid
5
E002
Luis
Fernández
Pin
Barcelona
3
E003
Pedro
Ruiz
Llamas
Valencia
2
E004
Ramón
Ruiz
Rodríguez
Alicante
Null
Employees |×[ Cities:
Employee
FirstName
Surname1
Surname2
City
Population millions)
E001
Juan
Pérez
Gómez
Madrid
5
E002
Luis
Fernández
Pin
Barcelona
3
E003
Pedro
Ruiz
Llamas
Valencia
2
Null
Null
Null
Null
Sevilla
1
Employees ]×[ Cities:
Employee
FirstName
LastName1
LastName2
City
Population millions)
E001
Juan
Pérez
Gómez
Madrid
5
E002
Luis
Fernández
Pin
Barcelona
3
E003
Pedro
Ruiz
Llamas
Valencia
2
E004
Ramón
Ruiz
Rodríguez
Alicante
Null
Null
Null
Null
Null
Sevilla
1
Division of two relations R1 and R2.
To perform the operation, two conditions must be met:
grado(R1) > grado(R2).
The set of attributes C of R2, A(R2), must be included in the attributes of R1, A(R1), es decir, A(R2) ⊂ A(R1).
R1÷R2 is defined from the operations of Cartesian product, difference and projection. Its formal definition is:
X1 = ΠC(R1)
X2 = ΠC(R2×X1 − R1)
R1÷R2 = X1 − X2
R1÷R2 defines a new relation on the subset A(< i>R1)−A(R2) de atributos de R1. It contains the values of these attributes that in the tuples of R1 are combined with each of the tuples of R2.
For example, Employees÷Cities produces a relation in which the column City does not appear, nor does the employee E004 appear because Alicante does not appear in the Cities table.
Employee
First name
Surname1
Surname2
E001
Juan
Pérez
Gómez
E002
Luis
Fernández
Pin
E003
Pedro
Ruiz
Llamas
Assignment.
A relational expression of relational algebra is given a name:
name ← expression
The name is used in subsequent relational expressions. Por ejemplo, T ← ΠB(R1−R2)
Rename.
It is expressed by ρX(A1,.... ,An)(E) and indicates to rename the relational expression < i>E as X, and rename also the attributes as A1, . .., An.
Update.
Allows to update a value of a tuple of a relation R: σF(R) ← E, where E is a relational expression.
With these additional operations we have a true procedural language. For example, to add and remove a relational expression E to the relation R, it is done respectively by means of.
R ← R∪ER ← R−E
The SQL language
SQL (Structured Query Language) is the standard language for accessing relational databases. It is a fourth-generation high-level language (4GL), declarative (not procedural), simple to use, based on relational algebra.
SQL also has four basic operations: INSERT, SELECT, UPDATE and DELETE, to insert, select, update and delete rows, respectively. The form of the query statement is.
SELECT A FROM R WHERE C
In A the names of the attributes to be selected are specified.
In R the table (relation) to use is specified.
In C the tuple selection criteria is specified.
The result is a subtable, in which rows and columns have been selected.
SQL can be interactive or non-interactive. Interactive SQL is suitable for defining the structure of a database, performing queries and prototyping. Non-interactive SQL is SQL embedded in a programming language, and can be static or dynamic. In dynamic SQL, variables can be used.
In our example of Employees:
SELECT Employee, City FROM Employees WHERE LastName1=Ruiz
The result is:
Employee
City
E003
Valencia
E004
Alicante
Multidimensional databases
Relationships (tables) are two-dimensional, since they relate two dimensions: rows (entities) with columns (attributes of those entities). But relationships of more than two dimensions can exist. For example, the sales of products manufactured by a company, with the attributes of: product, area and year of sale. In this case we do not have a two-dimensional table, but a three-dimensional table (or cube), being the dimensions: Product, Zone and Year.
Each dimension has an identifying key. In the case of the Employees (2D) table, the identifying keys are Employee and Attribute. In the case of the product sales table (3D), the keys are Product, Zone and Year. If we consider the quarter number of the year (a value between 1 and 4), we would have 4 dimensions (a hypercube): Product, Zone, Year and Quarter.
Triggers
These are procedures that are executed when a previously specified event occurs. The events are the operations of inserting (INSERT), deleting (DELETE) and updating (UPDATE) rows. A trigger can be executed before or after the data is modified.
The triggers are used for:
Implement business rules. A business rule is a constraint, requirement, need or special activity that must be checked in the mentioned database operations.
Prevent data errors, synchronize tables, modify values, etc.
Verify referential integrity: verify that an entity always relates to other valid entities in the database.
OLAP (Online Analytical Processing)
It is a technique of real-time analysis of a database to search for or discover hidden trends or patterns. It is called "data mining". It can involve millions of records with several gigabytes of occupancy. In general, the operations are read-only.
The system allows selective scanning of data and responds to queries quickly enough. It allows users to easily extract data selectively and view it from different viewpoints. To facilitate this type of analysis, OLAP data is stored in a high-performance multidimensional database. OLAP is used in the field called "Business Intelligence", which aims to streamline the querying of large enterprise databases to facilitate decision making.
Since OLAP applications use multidimensional databases, they are also called MOLAP (Multidimensional OLAP). This term is used to differentiate it from other types of OLAP such as ROLAP (Relational OLAP) and HOLAP (Hybrid OLAP, which combines MOLAP and ROLAP).
In ROLAP, all the cube information, its data, its sums, etc., are stored in a relational database.
Normal forms
Normal forms are organizational structures for the data in a database. Normalization pursues several purposes: 1) to eliminate redundant data; 2) to restrict impermissible operations; 3) to ensure consistency so that logical dependencies between data make sense.
1NF. First normal form or minimal form. It meets the following conditions:
No order in the rows.
No order in the columns.
No rows with the same key.
The row-column intersection has only one value. Some interpretations admit the null value (non-existent or unknown).
A value cannot be a table.
The primary key may consist of one or more columns.
Each column in the table that does not belong to the primary key must depend on that primary key.
2NF. Second normal form. Table columns that do not belong to the concatenated primary key may depend on a part of the concatenated key.
3NF. Third normal form. The data depends only on the primary key and does not depend on a secondary attribute (an attribute that is not part of the primary key).
NF2 (not first normal form). It allows nested relationships (a value can be a relationship), grouping attributes and values, sharing data or relationships, etc.
eNF2 makes the NF2 model more flexible by allowing free combination of constructs (set, tuple, lists, bags and arrays) and by supporting parameterized data types.
Limitations of the relational model
The restriction of the universe of possible elements to (two-dimensional) tables is a major conceptual limitation a priori. Moreover, the term "relation" is not very appropriate, since it is too generic to be applied to tables, which are specific data structures.
And as tables there are also limitations:
It is not possible to select columns of a certain type (numeric, for example) or columns corresponding to attributes whose names begin with "a", etc.
It is not possible to share elements (data, attributes, etc.) between different relationships.
Attributes cannot be grouped or form hierarchies.
Hierarchical objects are not supported. The only way is to use natural unions.
With respect to SQL, the standard relational database access language, there are several major drawbacks:
There are many SQL dialects. Standard SQL is the official ANSI-approved version, but it does not precisely define a single language. There are different versions of SQL that are ANSI compliant.
The ANSI standard does not define an interactive version of SQL. SQL commands are usually embedded in programs written in 4GL. SQL itself is considered a 4GL.
SQL is not a complete application development language. It is only oriented to the management of data tables, not allowing to establish conditions, perform loops, etc., that is, normal programming, so there is a problem of coupling (impedance mismatch) between the language and SQL, for not having a common semantic foundation.
However, SQL3 is the name of a standardization committee that thoroughly revamped the SQL-92 language). It includes support for object-oriented database management, eliminating the distinction between programming languages and database management languages, thus eliminating that coupling problem.
Specification in MENTAL
Relationship as a set of sets
A relationship R can be specified as a set of rows, where each row is itself a set of attributes. For example, the table Employees can be specified like this:
( R = {
{E001/Employee Juan/First name Perez/Surname1
Gómez/Surname2 Madrid/City}
where vij is the value of order entity i and order attribute j, and Aj the name of order attribute j.
The cardinality of R is R# = n (number of rows), and its degree is A# = m, where A is the set of attribute names: (A = {A1...Am}).
Ratio as an extensive function
A R (two-dimensional table) relationship can be considered a set of basic or elementary relationships consisting of 3 elements: the key c (the identifier of an entity), an attribute a of that entity, and a value v of that attribute. This relationship is expressed as an extensive function of two parameters (c and a) and result v:
( R(c a) = v )
For example, in the relation Employees, the first tuple can be coded as a set like this:
{ ( Employees(E001 Name) = John )
( Employees(E001 LastName1) = Perez )
( Employees(E001 Lastname2) = Gómez )
( Employees(E001 City) = Madrid) }
To avoid repeating the attribute names in each tuple, we can specify :
( A = [First name Last name1 Last name2 City] )
{ [( Employees(E001 A) = [Juan Pérez Gómez Madrid] )]
[( Employees(E002 A) = [Luis Fernández Pin Barcelona] )]
[( Employees(E003 A) = [Pedro Ruiz Llamas Valencia] )]
[( Employees(E004 A) = [Ramón Ruiz Rodríguez Sevilla] )] }
In general, { [( R(c A) = [⌊attribute values⌋ )]
where c is the key of the corresponding entity, ( A = [A1...Am] ) and A1...Am are the names of the attributes.
The five basic operations of the relational model
Union of two relations R1 and R2: R1∪R2 (union of sets).
R1 and R2 must be defined as sets of sets.
Difference of two relations R1 and R2: (R1 ∪' R2) (difference between sets).
R1 and R2 must also be defined as sets of sets.
Cartesian product of the relations R1 and R2.
〈( R1×R2 = {[ [R1↓]∪[R2↓] ]} )〉
R1 and R2 must also be defined as sets of sets.
The resulting degree is (A1# + A2#). And its cardinality is (R1#)*(R2#).
A1 and A2 are the attribute sets of R1 and R2, respectively.
Projection of the relation R with respect to the subset of attributes B⊂A, where A is the set of attribute names of R.
If we define the relation R as an extensive function, the expression is:
〈( Proy(R c B) = {〈([R(c [B↓]])]] )〉 or.
〈( Proy(R c B) = {〈(R(c x) ← x∈B))〉} )〉
Example:
(R = Employees)
(A = {Employee First Name Last Name1 Last Name2 City})
(B = {City})
Proy(Employees B) // ev. { (Madrid Barcelona Valencia Valencia Sevilla) }
(B = {FirstName LastName1})
proj(Employees B) // ev. { (Juan Luis Pedro Ramón)
(Perez Fernandez Ruiz Ruiz) }
Selection of tuples of R by a selection criterion s.
(C = A(R2)) // set of attributes of R2
(X1 = Proj(R C))
(X2 = Proy((R2×X1 − R1) C)))
(R1¸R2 = (X1 − X2))
Assignment.
It is performed by a substitution expression, immediate, delayed or initial:
( name = expression ) // immediate substitution
( name =: expression ) // deferred substitution
( name := expression ) // initial substitution
Rename.
It is equivalent to the previous one.
Update.
Allows to update a value of a tuple (R(c a) = v).
Multidimensional databases
In MENTAL, the generalization of (two-dimensional) tables to multidimensional relations is very simple, since it is enough to consider functions of more than two arguments. The general expression is
( R(c1 ... cn) = value )
where c1 ... cn are the keys associated to each dimension.
For example, in the case of the 3D product sales relation, the relation defined as a function is composed of a set of terms of the form.
( Sales(product zone year) = quantity )
Abbreviated,
( V(p z a) = c )
OLAP
MENTAL's flexibility allows to perform database analysis processes in a simple and intuitive way.
Examples for 3D product sales relationship:
Total products sold in Spain of product P001 in 2014:
+⊣{〈( V(p z a) ← (p=P001 ∧ z=Spain ∧ a=2014) )&〉)}
Products sold in Spain in 2014 more than 5 units:
(〈 (p ← (V(p z a) > 5)∧(z=Spain)∧(a=2014) 〉)
Best-selling product in Spain in the years 2000 to 2014 (there may be several products with the same amount of sales):
〈 (Vmax(a) := 0) 〉 // initial value of the nr. of products sold in the year.
〈( (V(p z a)) 〈( Vmax(a)) → (Vmax(a) = V(p z a)) ) 〉)
(〈 Pmax(a) = {〈p ← V(p z a) = Vmax(a) 〉) // best-selling products in the year.
(years = [2000...2014])
[(años Pmax(años))]
Advantages of MENTAL as a Relational Database Management System (RDBMS)
MENTAL is a valid language for expressing relationships (two-dimensional tables) and performing the operations (basic and derived) of the relational model. Moreover, with MENTAL you can overcome the limitations of the relational model by providing generality and flexibility to relax the restrictions imposed by this paradigm: support hierarchical objects, share expressions, interrelate expressions, perform advanced selections (by types, by hierarchical levels, etc.), group attributes, etc.
MENTAL is a simple and compact universal language for relational database management. With MENTAL, the relational paradigm is simplified and allows to use a single language for all kinds of operations: to define relations, to select tuples, to modify tables, etc.
MENTAL allows to combine the relational paradigm with other programming paradigms.
MENTAL could also be used to define other database management models (object-oriented, multidimensional, etc.).
MENTAL allows using fuzzy values (of linguistic variables) such as cold, hot, fast, slow, high, low, etc., affected by a factor between 0 and 1. In this sense, fuzzy queries can be performed.
There is a version of SQL called FSQL (Fuzzy SQL), but MENTAL has the ability to handle fuzzy values, without the need to use a specific language.
MENTAL allows to enable/disable triggers, modify triggers (triggers dynamic), parameterized triggers, higher order triggers (triggers of triggers). They are implemented by means of generic expressions. They allow to detect events before and after each operation. They allow to perform any type of operation (derived calculations, set constraints, etc.), and not only database update operations.
The value Null is not needed to specify that a table value does not exist or is not known. Simply, the relationship does not exist.
MENTAL refers only to the conceptual part. It does not refer to the implementation issues.
Relational algebra is not needed. It is not strictly necessary to define special operations such as natural join, outer join, etc. Relationships between different tables can be realized directly by the language.
You can specify magnitudes (quantities and units, such as 230*€ or 120*Kgr).
Can be used to perform database analysis processes (OLAP).
Addenda
Brief history of the relational model
The relational database model was born in June 1970, when Edgar Frank Codd (while working at IBM) published an article entitled "A Relational Model of Data for Large Shared Data Banks" in the journal Communications of the ACM, which provided a new view of data as two-dimensional tables, accompanied by a solid theoretical foundation: relational algebra.
The relational model is considered one of the great technical achievements of the 20th century. Codd formalized a field that until then was an unstructured collection of ad hoc products and techniques and turned it into a theoretical scientific discipline with practical application. It can be said that all DBMSs are based on Codd's ideas. Codd is considered the father of relational databases.
Subsequently, Codd presented another language based on first-order predicate logic, showing that it was equivalent in expressive power to relational algebra. This second language he called "relational calculus", a non-procedural language (it specifies the "what", not the "how"). In contrast, relational algebra is a procedural language, since the computation of a new relation is done by specifying the operations to be performed and the order in which they must be performed.
Other highlights were:
In 1976, Peter Cheng introduced a more conceptual model than Codd's: the entity-relationship model.
In June 1976, the first commercial DBMS appeared: Multics Relational Data Store (MRDS), from Honeywell Information Systems. Multics was one of the first time-sharing operating systems.
In July of the same year Oracle 2.0 appeared. Today, Oracle is one of the most widely used products at the enterprise level.
In 1977, based on Codd's ideas, IBM introduced "System R", a relational database management system that included the SEQUEL language (Structured English Query Language).
In 1979 appeared the dBase program for personal computers, developed by Wayne Ratliff at the NSA's Jet Propulsion Laboratory. dBase quickly became the most popular database software in the 1980s. It was both a DBMS and a programming language, and it was open. The fact that it was open led to other versions such as Clipper and FoxPro.
In 1983, IBM introduced the DB2 system, which included the first version of SQL, the database interrogation language, which was an enhanced version of SEQUEL.
In 1985, Codd, in an article in Computer World presented 12 rules that a database had to comply with to be considered truly relational.
In 1986, ANSI standardized the SQL language, resulting in the first version of SQL (SQL1 or SQL-86). In 1987 it was accepted by ISO.
In 1989 Microsoft introduced SQL Server, which was not consolidated until version 4.2, with the appearance of Windows. This product dominated the client/server market in the 1990s.
In 1992, ANSI and ISO introduced SQL2 (or SQL-92).
In 1993, Codd coins the term "OLAP" and presents "the 12 laws of online analytical processing".
In 2000, MySQL, an open source RDBMS appeared. It soon became the standard relational DBMS for small and medium-sized companies. MySQL is most associated with the database for web applications. MySQL was originally developed by the Swedish company MySQL. It was later acquired by Oracle. Developers can use MySQL under the GNU General Public License (GPL), but companies must obtain a commercial license from Oracle.
Currently, SQL is the standard for most commercial RDBMSs. The latest version is SQL-2008.
The generalization of the relational model
There have been several attempts to solve these problems by introducing some generality and flexibility into the relational model, relaxing the restrictions imposed by 1NF. Currently the trend is towards NF2 (not first normal form), in which grouping attributes and values, sharing data or relationships, etc. are allowed.
Here are some of the so-called post-relational models:
An algebra that allows attributes to be sets of atomic objects [Jaeschke, 1982].
An algebra that supports nested (attribute-value type) tuples [Zaniolo, 1985].
A model in which attributes can be relations, which can have attributes with values [Scheck, 1986].
An even more general model in which attribute values can be atoms, tuples, sets of atoms, sets of tuples, sets of tuples, or sets of sets [Bancilhon, 1986].
A relational model in which complex objects are shared [Atkinson, 1978].
A formal object-oriented database model that advocates "object identity," which allows objects to be distinguished regardless of their content, position, or addressing. They can also be shared [Khoshafian, 1986].
A nested relational model in which the value of an attribute can itself be a relation [Makinouchi, 1977] [Jaeschke, 1982].
Codd himself has suggested extensions to the model to contemplate more semantics [Codd, 1979].
Bibliography
Abitebond, S.; Hull, R.; Vianu, V. Foundations of Databases. Addison-Wesley, 1995. (Incluye el concepto de BD computacionalmente completa).
Atkinson, M.P. Programming languages and data-bases. Proc. VLDB, 1978.
Bancilhon, F.; Khoshafian, S. A calculus for complex objects. ACM Int. Symp. PODS, 1986.
Codd, E.F. A Relational Model for Large Shared Data Banks. Communications of the ACM, vol. 13, no. 6, pp. 377-387, Junio 1970.
Codd, E.F. Relational Completeness of Data Base Sublanguages. En [Rustin, 1972], pp. 33-64, 1972.
Codd, E.F. Extending the Database Relational Model to Capture More Meaning. ACM Transactions on Database Systems, vol. 4, no. 4, pp. 397-434, Dic. 1979.
Codd, E.F. Further Normalization of the Data Base Relational Model. En [Rustin, 1972], pp. 33-64, 1972.
Codd, E.F. The 1981 ACM Turing Award Lecture. Relational Database: A Practical Foundation for Productivity. Communications of the ACM, 25 (2): 109-117, Feb. 1982.
Codd, E.F. The Relational Model for Database Management: versión 2. Addison-Wesley, 1990.
Date, Chris J. Introducción a los sistemas de bases de datos. Pearson Educación, 2001.
Date, Chris J. What First Normal Form Really Means. Internet.
Elsmari, Ramez A.; Navathe, Shamkant, B. Fundamentos de Sistemas de Bases de datos. Addison-Wesley, 2002.
Jaeschke, G.; Schek, H.J. Remarks on the Algebra of Non First Normal Form Relations. Proceedings of the ACM SIGACT-SIGMOS Symposium on Principles of Database Systems, 1982, pp. 124-138.
Khoshafian, S; Copeland, G. Object Identity. Proc. OOSPLA, Portland, OR, USA, 1986.
Korth, Henry F.; Silberschatz, Abraham. Fundamentos de Bases de datos. McGraw-Hill, 2002.
López-Sebastián Sanz, Julio; Álvarez Real, José. Sistemas de bases de datos. Relacionales, Jeráruicas, Red. Mases/ediciones, 1987.
Maine, Alan; Wood, Richard. Introducción a las Bases de datos Relacionales. Díaz de Santos, 1988.
Makinouchi, A. A Consideration of Normal Form on Not-necessarily Normalized Relations in the Relational Data Model. Proceedings of the International Conference on Very Large Data Bases, 1977, pp. 447-453.
Planche, R. Dominio de la Modelización Conceptual. Masson, 1992.
Rustin, R. (ed.). Data Base Systems. Prentice-Hall, 1072.
Scheck, H; Scholl, M. The relational model with relation valued attributes. Info. Syst. vol. 11, no. 2, 1986.
Zaniolo, C. The representation and deductive retrieval of complex objects. Conf. VLDB, 1985.