El modelo relacional ( MR ) es un enfoque para gestionar datos utilizando una estructura y un lenguaje consistentes con la lógica de predicados de primer orden , descrito por primera vez en 1969 por el científico informático inglés Edgar F. Codd , [ 1 ] [ 2 ] donde todos los datos se representan en términos de tuplas , agrupadas en relaciones . Una base de datos organizada en términos del modelo relacional es una base de datos relacional .
El objetivo del modelo relacional es proporcionar un método declarativo para especificar datos y consultas: los usuarios indican directamente qué información contiene la base de datos y qué información desean obtener de ella, y dejan que el software del sistema de gestión de bases de datos se encargue de describir las estructuras de datos para almacenar la información y los procedimientos de recuperación para responder a las consultas.
La mayoría de las bases de datos relacionales utilizan el lenguaje de definición de datos y consulta SQL ; estos sistemas implementan lo que puede considerarse una aproximación de ingeniería al modelo relacional. En un esquema de base de datos SQL, una tabla se corresponde con una variable de predicado; el contenido de una tabla con una relación; las restricciones de clave, otras restricciones y las consultas SQL se corresponden con predicados. Sin embargo, las bases de datos SQL se desvían del modelo relacional en muchos detalles , y Codd argumentó enérgicamente en contra de las desviaciones que comprometen los principios originales. [ 3 ]
Historia
El modelo relacional fue desarrollado por Edgar F. Codd como un modelo general de datos, y posteriormente promovido por Chris Date y Hugh Darwen, entre otros. En su obra de 1995, El Tercer Manifiesto , Date y Darwen intentan demostrar cómo el modelo relacional puede incorporar ciertas características "deseadas" de la programación orientada a objetos . [ 4 ]
Extensiones
Algunos años después de la publicación de su modelo de 1970, Codd propuso una versión con lógica de tres valores (Verdadero, Falso, Ausente/ Nulo ) para tratar la información faltante, y en su libro The Relational Model for Database Management Version 2 (1990) fue un paso más allá con una versión de lógica de cuatro valores (Verdadero, Falso, Ausente pero Aplicable, Ausente pero Inaplicable). [ 5 ]
Conceptualización
Conceptos básicos

Una relación consta de un encabezado y un cuerpo . El encabezado define un conjunto de atributos , cada uno con un nombre y un tipo de dato (a veces llamado dominio ). El número de atributos en este conjunto es el grado o aridad de la relación . El cuerpo es un conjunto de tuplas . Una tupla es una colección de n valores , donde n es el grado de la relación, y cada valor en la tupla corresponde a un atributo único. [ 6 ] El número de tuplas en este conjunto es la cardinalidad de la relación . [ 7 ] : 17–22
Las relaciones se representan mediante variables relacionales o relvars , que pueden reasignarse. [ 7 ] : 22–24 Una base de datos es una colección de relvars. [ 7 ] : 112–113
En este modelo, las bases de datos siguen el Principio de Información : En cualquier momento dado, toda la información en la base de datos está representada únicamente por valores dentro de tuplas, correspondientes a atributos, en relaciones identificadas por relvars. [ 7 ] : 111
Restricciones
Una base de datos puede definir expresiones booleanas arbitrarias como restricciones . Si todas las restricciones se evalúan como verdaderas , la base de datos es consistente ; de lo contrario, es inconsistente . Si un cambio en las restricciones de una base de datos la dejara en un estado inconsistente, ese cambio es ilegal y no debe tener éxito. [ 7 ] : 91
En general, las restricciones se expresan mediante operadores de comparación relacional, de los cuales solo uno, "es subconjunto de" (⊆), es teóricamente suficiente. [ 8 ]
Dos casos especiales de restricciones se expresan como claves y claves foráneas :
Llaves
Una clave candidata , o simplemente una clave , es el subconjunto más pequeño de atributos que garantiza la diferenciación única de cada tupla en una relación. Dado que cada tupla en una relación debe ser única, toda relación necesariamente tiene una clave, que puede ser su conjunto completo de atributos. Una relación puede tener múltiples claves, ya que puede haber múltiples maneras de diferenciar de forma única cada tupla. [ 7 ] : 31–33
Un atributo puede ser único entre tuplas sin ser una clave. Por ejemplo, una relación que describe a los empleados de una empresa puede tener dos atributos: ID y Nombre. Aunque ningún empleado comparta actualmente el mismo nombre, si es posible contratar a un nuevo empleado con el mismo nombre que uno actual, el subconjunto de atributos {Nombre} no es una clave. Por el contrario, si el subconjunto {ID} es una clave, esto significa no solo que ningún empleado comparte actualmente un ID, sino que ningún empleado compartirá jamás un ID. [ 7 ] : 31–33
claves foráneas
Una clave foránea es un subconjunto de atributos A en una relación R 1 que se corresponde con una clave de otra relación R 2 , con la propiedad de que la proyección de R 1 sobre A es un subconjunto de la proyección de R 2 sobre A. En otras palabras, si una tupla en R 1 contiene valores para una clave foránea, debe existir una tupla correspondiente en R 2 que contenga los mismos valores para la clave correspondiente. [ 7 ] : 34
Operaciones relacionales
Los usuarios (o programas) solicitan datos de una base de datos relacional enviándole una consulta . En respuesta a una consulta, la base de datos devuelve un conjunto de resultados. [ 2 ]
A menudo, los datos de varias tablas se combinan en una sola mediante una operación de unión (join ). Conceptualmente, esto se realiza tomando todas las combinaciones posibles de filas (el producto cartesiano ) y luego filtrando todo excepto la respuesta. [ 2 ]
Además de la operación de unión (join), existen varias operaciones relacionales. Estas incluyen la proyección (que elimina algunas columnas), la restricción (que elimina algunas filas), la unión (que combina dos tablas con estructuras similares), la diferencia (que muestra las filas de una tabla que no se encuentran en la otra), la intersección (que muestra las filas presentes en ambas tablas) y el producto (como se mencionó anteriormente, que combina cada fila de una tabla con cada fila de la otra). Según las fuentes consultadas, existen otros operadores , muchos de los cuales se pueden definir en función de los mencionados. Estos incluyen la semiunión, operadores externos como la unión externa y la unión externa, y diversas formas de división. También existen operadores para renombrar columnas, operadores de resumen o agregación, y si se permiten valores de relación como atributos (atributos con valor de relación), operadores como agrupar y desagrupar. [ 2 ]
La flexibilidad de las bases de datos relacionales permite a los programadores escribir consultas que no fueron previstas por los diseñadores. Como resultado, las bases de datos relacionales pueden ser utilizadas por múltiples aplicaciones de maneras que los diseñadores originales no anticiparon, lo cual es especialmente importante para bases de datos que podrían usarse durante mucho tiempo (quizás varias décadas). [ 2 ] Esto ha hecho que la idea e implementación de bases de datos relacionales sean muy populares en las empresas. [ 9 ]
Normalización de la base de datos
Las relaciones se clasifican según los tipos de anomalías a las que son vulnerables. Una base de datos en primera forma normal es vulnerable a todo tipo de anomalías, mientras que una base de datos en forma normal de dominio/clave no presenta anomalías de modificación. Las formas normales son jerárquicas. Es decir, el nivel más bajo es la primera forma normal, y la base de datos no puede cumplir los requisitos de las formas normales de nivel superior sin antes haber cumplido todos los requisitos de las formas normales inferiores. [ 10 ]
Interpretación lógica
El modelo relacional es un sistema formal . Los atributos de una relación definen un conjunto de proposiciones lógicas . Cada proposición puede expresarse como una tupla. El cuerpo de una relación es un subconjunto de estas tuplas, que representa qué proposiciones son verdaderas. Las restricciones representan proposiciones adicionales que también deben ser verdaderas. El álgebra relacional es un conjunto de reglas lógicas que permiten inferir válidamente conclusiones a partir de estas proposiciones. [ 7 ] : 95–101
La definición de tupla permite una única tupla vacía sin valores, que corresponde al conjunto vacío de atributos. Si una relación tiene un grado de 0 (es decir, su encabezado no contiene atributos), puede tener una cardinalidad de 0 (un cuerpo que no contiene tuplas) o una cardinalidad de 1 (un cuerpo que contiene la única tupla vacía). Estas relaciones representan valores de verdad booleanos . La relación con grado 0 y cardinalidad 0 es Falsa , mientras que la relación con grado 0 y cardinalidad 1 es Verdadera . [ 7 ] : 221–223
Ejemplo
Si una relación de Empleados contiene los atributos , entonces la tupla representa la proposición: "Existe una empleada llamada Alice con ID 1 ". Esta proposición puede ser verdadera o falsa. Si esta tupla existe en el cuerpo de la relación, la proposición es verdadera (existe dicha empleada). Si esta tupla no está en el cuerpo de la relación, la proposición es falsa (no existe dicha empleada). [ 7 ] : 96–97
Además, siSi es una clave, entonces una relación que contiene las tuplas .yEsto representaría la siguiente contradicción :
- Existe una empleada con el nombre Alice y la ID 1 .
- Existe un empleado con el nombre Bob y la identificación 1 .
- No existen varios empleados con el mismo ID.
Según el principio de explosión , esta contradicción permitiría al sistema demostrar que cualquier proposición arbitraria es verdadera. La base de datos debe aplicar la restricción de clave para evitar esto. [ 7 ] : 104
Ejemplos
Base de datos
Un ejemplo idealizado y muy simple de la descripción de algunas variables de relación ( relavars) y sus atributos:
- Cliente ( ID de cliente , Nombre)
- Pedido ( ID del pedido , ID del cliente , ID de la factura , Fecha)
- Factura ( ID de factura , ID de cliente , ID de pedido , Estado)
En este diseño tenemos tres variables relativas: Cliente, Pedido y Factura. Los atributos en negrita y subrayados son claves candidatas . Los atributos que no están en negrita ni subrayados son claves foráneas .
Normalmente, se elige una clave candidata que se denomina clave primaria y se utiliza con preferencia sobre las demás claves candidatas, que luego se denominan claves alternativas .
Una clave candidata es un identificador único que garantiza que ninguna tupla se duplique; esto convertiría la relación en algo distinto, concretamente una bolsa , al violar la definición básica de un conjunto . Tanto las claves foráneas como las superclaves (que incluyen las claves candidatas) pueden ser compuestas, es decir, pueden estar formadas por varios atributos. A continuación se muestra una tabla que representa la relación de nuestro ejemplo Cliente relvar; una relación puede considerarse como un valor que se puede atribuir a un relvar.
Relación con el cliente
Si intentáramos insertar un nuevo cliente con el ID 123 , esto violaría el diseño de la tabla, ya que el ID de cliente es una clave primaria y ya tenemos un cliente con ese ID . El sistema de gestión de bases de datos (DBMS) debe rechazar una transacción de este tipo, ya que provocaría inconsistencias en la base de datos al violar una restricción de integridad . Sin embargo, es posible insertar otro cliente llamado Alice , siempre y cuando este nuevo cliente tenga un ID único, dado que el campo Nombre no forma parte de la clave primaria.
Las claves foráneas son restricciones de integridad que garantizan que el valor del conjunto de atributos se extraiga de una clave candidata en otra relación . Por ejemplo, en la relación Pedido, el atributo ID de cliente es una clave foránea. Una unión es la operación que extrae información de varias relaciones a la vez. Al unir las relaciones del ejemplo anterior, podríamos consultar la base de datos para obtener todos los Clientes, Pedidos y Facturas. Si solo quisiéramos las tuplas para un cliente específico, lo especificaríamos mediante una condición de restricción . Si quisiéramos recuperar todos los Pedidos para el Cliente 123 , podríamos consultar la base de datos para que devuelva todas las filas de la tabla Pedido con el ID de cliente 123 .
Existe un fallo en el diseño de nuestra base de datos . El relvar Factura contiene un atributo ID de pedido. Por lo tanto, cada tupla en el relvar Factura tendrá un ID de pedido, lo que implica que hay exactamente un pedido por cada factura. Pero en realidad, una factura puede crearse para muchos pedidos, o incluso para ninguno en particular. Además, el relvar Pedido contiene un atributo ID de factura, lo que implica que cada pedido tiene una factura correspondiente. Pero, de nuevo, esto no siempre es cierto en la práctica. Un pedido a veces se paga mediante varias facturas, y a veces se paga sin factura. En otras palabras, puede haber muchas facturas por pedido y muchos pedidos por factura. Esta es una relación de muchos a muchos entre Pedido y Factura (también llamada relación no específica ). Para representar esta relación en la base de datos, se debe introducir un nuevo relvar cuya función sea especificar la correspondencia entre Pedidos y Facturas.
Factura de pedido ( ID de pedido , ID de factura )
Ahora bien, la relación Order tiene una relación de uno a muchos con la tabla OrderInvoice, al igual que la relación Invoice. Si queremos recuperar todas las facturas de un pedido en particular, podemos consultar todos los pedidos donde el ID de pedido en la relación Order sea igual al ID de pedido en OrderInvoice, y donde el ID de factura en OrderInvoice sea igual al ID de factura en Invoice.
Aplicación a bases de datos relacionales
En una base de datos relacional, un tipo de dato puede ser el conjunto de números enteros, el conjunto de cadenas de caracteres, el conjunto de fechas, etc. El modelo relacional no impone qué tipos de datos deben ser compatibles.
Los atributos se representan comúnmente como columnas , las tuplas como filas y las relaciones como tablas . Una tabla se define mediante una lista de columnas, cada una de las cuales especifica un nombre de columna único y el tipo de valores permitidos para esa columna. El valor de un atributo es la entrada en una columna y fila específicas.
Una variable de relación de base de datos se conoce comúnmente como tabla base . El encabezado de su valor asignado en cualquier momento es el especificado en la declaración de la tabla, y su cuerpo es el que le asignó más recientemente un operador de actualización (normalmente, INSERT, UPDATE o DELETE). El encabezado y el cuerpo de la tabla resultante de la evaluación de una consulta vienen determinados por las definiciones de los operadores utilizados en dicha consulta.
SQL y el modelo relacional
SQL, inicialmente promovido como el lenguaje estándar para bases de datos relacionales , se desvía del modelo relacional en varios aspectos. El estándar ISO SQL actual no menciona el modelo relacional ni utiliza términos o conceptos relacionales.
Según el modelo relacional, los atributos y las tuplas de una relación son conjuntos matemáticos , lo que significa que no tienen un orden específico y son únicos. En una tabla SQL, ni las filas ni las columnas son conjuntos propiamente dichos. Una tabla puede contener filas y columnas duplicadas, y las columnas de una tabla tienen un orden explícito. SQL utiliza un valor nulo para indicar datos faltantes, lo cual no tiene equivalente en el modelo relacional. Dado que una fila puede representar información desconocida, SQL no se adhiere al principio de información del modelo relacional . [ 7 ] : 153–155, 162
Formulación basada en la teoría de conjuntos
Las nociones básicas en el modelo relacional son los nombres de las relaciones y los nombres de los atributos . Los representaremos como cadenas como "Persona" y "nombre" y normalmente utilizaremos las variables.ypara abarcarlos. Otra noción básica es el conjunto de valores atómicos que contiene valores como números y cadenas.
Nuestra primera definición se refiere a la noción de tupla , que formaliza la noción de fila o registro en una tabla:
- Tupla
- Una tupla es una función parcial que asigna valores atómicos a los nombres de los atributos.
- Encabezamiento
- Un encabezado es un conjunto finito de nombres de atributos.
- Proyección
- La proyección de una tuplaen un conjunto finito de atributoses.
La siguiente definición define la relación que formaliza el contenido de una tabla tal como se define en el modelo relacional.
- Relación
- Una relación es una tuplacon, el encabezado y, el cuerpo, un conjunto de tuplas que tienen todas el dominio.
Dicha relación se corresponde estrechamente con lo que se suele denominar la extensión de un predicado en lógica de primer orden, con la salvedad de que aquí identificamos los lugares del predicado con nombres de atributos. Generalmente, en el modelo relacional, se dice que un esquema de base de datos consta de un conjunto de nombres de relaciones, los encabezados asociados a estos nombres y las restricciones que deben cumplirse para cada instancia del esquema.
- Relación universo
- Un universo de relacionessobre un encabezadoes un conjunto no vacío de relaciones con encabezado.
- Esquema de relación
- Un esquema de relaciónconsta de un encabezadoy un predicadoque se define para todas las relacionescon encabezadoUna relación satisface un esquema de relación.si tiene encabezadoy satisface.
Restricciones clave y dependencias funcionales
Uno de los tipos más simples e importantes de restricciones relacionales es la restricción de clave . Esta nos indica que, en cada instancia de un esquema relacional determinado, las tuplas pueden identificarse por sus valores para ciertos atributos.
Una superclave es un conjunto de encabezados de columna cuyos valores concatenados son únicos en todas las filas. Formalmente:
- Una superclave se escribe como un conjunto finito de nombres de atributos.
- Una superclavese mantiene en una relaciónsi:
- y
- No existen dos tuplas distintas.de tal manera que.
- Una superclave se encuentra en un universo de relaciones.si se cumple en todas las relaciones en.
- Teorema: Una superclavese mantiene en una relación universoencimasi y solo siyse sostiene en.
- Clave del candidato
Una clave candidata es una superclave que no se puede subdividir para formar otra superclave.
- Una superclavese mantiene como clave candidata para un universo de relacionessi se mantiene como una superclave paray no existe un subconjunto adecuado deque también sirve como superclave para.
- Dependencia funcional
La dependencia funcional es la propiedad que permite que un valor en una tupla se derive de otro valor en esa misma tupla.
- Una dependencia funcional (FD, por sus siglas en inglés) se escribe comoparaconjuntos finitos de nombres de atributos.
- Una dependencia funcionalse mantiene en una relaciónsi:
- y
- tuplas,
- Una dependencia funcionalse mantiene en una relación universosi se cumple en todas las relaciones en.
- Dependencia funcional trivial
- Una dependencia funcional es trivial bajo un encabezadosi se cumple en todos los universos de relación sobre.
- Teorema: Un FDes trivial bajo un encabezadosi y solo si.
- Cierre
- Axiomas de Armstrong : El cierre de un conjunto de dependencias funcionales.bajo un encabezado, escrito como, es el superconjunto más pequeño dede tal manera que:
- (reflexividad)
- (transitividad) y
- (aumento)
- Teorema: Los axiomas de Armstrong son sólidos y completos; dado un encabezadoy un conjuntode FD que solo contienen subconjuntos de,si y solo sise mantiene en todos los universos de relación sobreen el que todos los FD enmantener. [ 11 ]
- Terminación
- La finalización de un conjunto finito de atributosbajo un conjunto finito de FD, escrito como, es el superconjunto más pequeño dede tal manera que:
- La completitud de un conjunto de atributos puede utilizarse para calcular si una determinada dependencia se encuentra en el cierre de un conjunto de dependencias funcionales.
- Teorema: Dado un conjuntode FD,si y solo si.
- Cubierta irreductible
- Una cubierta irreducible de un conjuntode FD es un conjuntode FD tales que:
- no existede tal manera que
- es un conjunto unitario y
- .
Algoritmo para derivar claves candidatas a partir de dependencias funcionales.
El algoritmo deriva claves candidatas a partir de dependencias funcionales. Entrada : un conjunto S de FD que contienen solo subconjuntos de un encabezado H. Salida: el conjunto C de superclaves que se mantienen como claves candidatas. todos los universos de relaciones sobre H en los que se cumplen todas las FD en SC := ∅ // claves candidatas encontradas Q := { H } // superclaves que contienen claves candidatas mientras Q <> ∅ hacer sea K algún elemento de Q Q := Q – { K } minimal := verdadero para cada X->Y en S hacer K' := ( K – Y ) ∪ X // derivar nueva superclave si K' ⊂ K entonces minimal := falso Q := Q ∪ { K' } fin si fin para si minimal y no hay un subconjunto de K en C entonces eliminar todos los superconjuntos de K de C C := C ∪ { K } fin si fin mientrasAlternativas
Otros modelos incluyen el modelo jerárquico y el modelo de red . Algunos sistemas que utilizan estas arquitecturas más antiguas todavía se usan hoy en día en centros de datos con grandes volúmenes de datos, o donde los sistemas existentes son tan complejos y abstractos que sería prohibitivo en términos de costos migrar a sistemas que emplean el modelo relacional. También cabe destacar las bases de datos orientadas a objetos más recientes [ 12 ] y Datalog [ 13 ] .
Datalog es un lenguaje de definición de bases de datos que combina una visión relacional de los datos, como en el modelo relacional, con una visión lógica, como en la programación lógica . Mientras que las bases de datos relacionales utilizan un cálculo relacional o álgebra relacional, con operaciones relacionales como unión , intersección , diferencia de conjuntos y producto cartesiano para especificar consultas, Datalog utiliza conectores lógicos, como if , or , and y not, para definir relaciones como parte de la propia base de datos.
A diferencia del modelo relacional, que no puede expresar consultas recursivas sin introducir un operador de punto fijo mínimo, [ 14 ] las relaciones recursivas se pueden definir en Datalog, sin introducir ningún conector lógico nuevo ni operadores.
Véase también
Referencias
- ↑ Codd, EF (1969), Derivabilidad, redundancia y consistencia de las relaciones almacenadas en grandes bancos de datos , Informe de investigación, IBM.
- 1 2 3 4 5 Codd, EF (1970). "Un modelo relacional de datos para grandes bancos de datos compartidos" . Communications of the ACM . Classics. 13 (6): 377– 87. doi : 10.1145/362384.362685 . S2CID 207549016 .
- ↑ Codd, E. F (1990), El modelo relacional para la gestión de bases de datos , Addison-Wesley, págs. 371–388 , ISBN 978-0-201-14192-4.
- ↑ "¿Tuvo el "Tercer Manifiesto" de Date y Darwen un impacto duradero?" . Computer Science Stack Exchange . Consultado el 3 de agosto de 2024 .
- ↑ Date, Christopher J. (2006). "18. Por qué la lógica trivalente y cuatrivalente no funciona". Date en la base de datos: Escritos 2000–2006 . Apress. págs. 329–41 . ISBN 978-1-59059-746-0.
- ↑ "Tupla en DBMS" . GeeksforGeeks . 12 de febrero de 2023. Consultado el 3 de agosto de 2024 .
- 1 2 3 4 5 6 7 8 9 10 11 12 13 Date, Chris J. (2013). Teoría relacional para profesionales de la informática: De qué se tratan realmente las bases de datos relacionales (1.ª ed.). Sebastopol, California: O'Reilly Media. ISBN 978-1-449-36943-9.
- ↑ "Modelo relacional | PDF | Modelo relacional | Base de datos relacional" . Scribd . Consultado el 27 de septiembre de 2025 .
- ↑ "Clasificación de DB-Engines" . DB-Engines . Consultado el 28 de junio de 2026 .
- ↑ David M. Kroenke, Procesamiento de bases de datos: Fundamentos, diseño e implementación (1997), Prentice-Hall, Inc., páginas 130–144
- ↑ Armstrong, William Ward (1974). Procesamiento de la información 74: Actas del Congreso IFIP 74. North-Holland. págs. 580–583 .
- ↑ Atkinson, M., Dewitt, D., Maier, D., Bancilhon, F., Dittrich, K. y Zdonik, S., 1990. El manifiesto del sistema de bases de datos orientado a objetos. En Bases de datos deductivas y orientadas a objetos (págs. 223-240). North-Holland.
- ↑ Maier, D., Tekle, KT, Kifer, M. y Warren, DS, 2018. Datalog: conceptos, historia y perspectivas. En Programación lógica declarativa: teoría, sistemas y aplicaciones (págs. 3-100).
- ↑ Aho, AV y Ullman, JD, 1979, enero. Universalidad de los lenguajes de recuperación de datos. En Actas del 6.º simposio ACM SIGACT-SIGPLAN sobre principios de lenguajes de programación (págs. 110-119).
Lecturas adicionales
- Date, Christopher J .; Darwen, Hugh (2000). Fundamentos para futuros sistemas de bases de datos: el tercer manifiesto; un estudio detallado del impacto de la teoría de tipos en el modelo relacional de datos, incluyendo un modelo integral de herencia de tipos (2.ª ed.). Reading, MA : Addison-Wesley. ISBN 978-0-201-70928-5.
- — — — (2007). Introducción a los sistemas de bases de datos (8.ª ed.). Boston: Pearson Education. ISBN 978-0-321-19784-9.
Enlaces externos
- Childs (1968), Viabilidad de una estructura de datos basada en la teoría de conjuntos: una estructura general basada en una definición reconstituida de relación (investigación), Handle, hdl : 2027.42/4164citado en el artículo de Codd de 1970.
- Darwen, Hugh, El Tercer Manifiesto (TTM).
- "Modelo relacional" , C2.
- Comparación de relaciones binarias y tuplas con respecto a la web semántica ( blog de la World Wide Web ), Sun.
- Modelo relacional
- 1969 en informática
- paradigmas de programación
- Sistemas de gestión de bases de datos
- Edgar F. Codd