Las 12 reglas de Codd son un sistema de reglas propuestas por Edgar F. Codd, del
modelo relacional para las bases de datos, diseado para definir qu requiere un sistema
de administracin de base de datos.1
Codd se percat de que existan bases de datos en el mercado las cuales decan ser
relacionales, pero lo nico que hacan era guardar la informacin en las tablas, sin estar
estas tablas literalmente normalizadas; entonces ste public 12 reglas que un verdadero
sistema relacional debera tener aunque en la prctica algunas de ellas son difciles de
realizar. Un sistema podr considerarse "ms relacional" cuanto ms siga estas reglas.
[editar] Reglas
Regla 2: la regla del acceso garantizado, todos los datos deben ser accesibles sin
ambigedad. Esta regla es esencialmente una nueva exposicin del requisito
fundamental para las llaves primarias. Dice que cada valor escalar individual en
la base de datos debe ser lgicamente direccionable especificando el nombre de
la tabla, la columna que lo contiene y la llave primaria.
Regla 9: independencia lgica de los datos, los cambios al nivel lgico (tablas,
columnas, filas, etc.) no deben requerir un cambio a una solicitud basada en la
estructura. La independencia de datos lgica es ms difcil de lograr que la
independencia fsica de datos.
En el modelo relacional es frecuente llamar tabla a una relacin, aunque para que una
tabla sea considerada como una relacin tiene que cumplir con algunas restricciones:
Todos los datos en una columna deben ser del mismo tipo.
Tuplas: Conjunto de filas que contienes los valores de cada uno de los
atributos para cada elemento de la relacin.
Claves
Cdigo de cama.
Descripcin
Seleccionar
Nombre de paciente y ubicacin. Y queda?
Ejemplo:
Conectar dos tablas de acuerdo a un atributo en comn:
SELECT PACIENTE.NOMBRE_PACIENTE, UBICACIN.Ubicacin
FRON PACIENTE, Ubicacin
WHERE UBICACIN Ubicacin.CODCAMA=PACIENTE.CODCAMA:
Otra etapa importante es la unin.
UNION: Despliega todas las filas que estn en una de las dos tablas. Para que dos tablas
puedan unir las estructuras de los datos seleccionados dichas estructuras de los datos
deben ser compatibles; es decir, si en ambas tablas hay tuplas iguales queda solo una de
ellas por lo tanto la duplicidad de elementos no se nota:
ORDER BY DIVISION
Crear dos tablas = Proveedores
Nombre texto
Ciudad Texto
Cdigo N entero o 0000
SELECT NOMBRE, CIUDAD, CODIGO
FROM PROVEEDORES
UNION
SELECT NOMBRE, CIUDAD, CODIGO
FROM PROVEEDORES, PROVEEDORES 2;
INTERSECCIN: Muestra todos los elementos que se repiten en las dos tablas.
Despliega todas las filas que estn en las dos tablas a la vez, tambin debe cumplir las
mismas condiciones que para la unin y queda:
SELECT PROVEEDORES
FROM PROVEEEDORES, PROVEEDORES
WHERE PROVEEDORES.CODIGO=PROVEEDORES2.CODIGO
DIFERENCIA: Es lo que est en la primera tabla que no se repite en la segunda.
SELECT PROVEEDORES
FROM PROVEEDORES
WHERE PROVEEDORES.CODIGO<>PROVEEDORES.CODIGO
O WHERE PROVEEDORES.CODIGO NOT=PROVEEDORES.CODIGO
FUNCIONES AGREGADAS
Las funciones agregadas son las que actan sobre los grupos de datos, m{as sobre filas
individuales. Los grupos de datos pueden ser una columna o un conjunto de columnas
incluyendo toda la tabla.
La funcin agregada es aplicada en la lnea del SELECT como si fuera un nombre de
columna la sintaxis general es:
SELECT FUNCION (NOMBRE COLUMA O *)
FROM
FUNCION AVG= Calcula el promedio de un conjunto de valores.
FUNCION COUNT= Cuenta el nmero de ocurrencia de los miembros de un conjunto.
FUNCION MAX= Determina el valor mximo de un conjunto de valores.
FUNCION MIN= Determina el valor mnimo de un conjunto de valores.
FUNCION SUM= Suma un conjunto de valores.
FUNCIONES DE GRUPO DE FILAS
Las clusulas DROPDRIVE sirve para ocupar los datos de acuerdo a un atributo en
comn AVG(S_BASE)
El SQL internamente hace la clasificacin de acuerdo al atributo incorporando en el
atributo DROPDRIVE
Una vez que los grupos estn formados, la funcin asociada al comando SELECT es
aplicada en forma individual a estos grupos, es decir, primero se ocupa DROPDRIVE.
Ejemplo:
Tabla empleado
SELECT CentroCosto, AVG(S_BASE)
FROM EMPLEADOS GROUP BY CentroCosto
HAVING= Al igual que la clusula WHERE para especificar la bsqueda por condicin
para grupos de filas se usa la clusula HAVING.
SELECT
FROM
(WHERE)
GROUP BY
HAVING= Acta sobre un grupo seleccionado.
Buscar todos los promedios -<< 150000.
SELECT CentroCosto, AVG(S_BASE) AS PROMEDIO.
FROM EMPLEADOS
GROUP BY CentroCosto
HAVING AVG(S_BASE) < 150000;
ORDER BY= La funcin ORDER BY permite ordenar los datos de acuerdo al valor de
un atributo asociado, este orden puede ser tanto ascendente como descendente.
ORDER BY NOMBRE CAMPO (ASC), CAMPO2 ASC
ORDER BY NOMBRE CAMPO (DESC), CAMPO2 DESC
Ejemplo:
SELECT CentroCosto, AVG(s_BASE)
FROM EMPLEADOS
GROUP BY CentroCosto
ORDER BY CentroCosto ASC; O
ORDER BY CentroCosto DESC;
SELECT CentroCosto, AVG(s_BASE), COUNT(FICHA)
FROM EMPLEADOS
WHERE TURNO <>NO
GROUP BY CentroCosto
ORDER BY CentroCosto DESC;
Consideraciones Generales
En un sistema de base de datos distribuida, los datos se almacenan en varios
computadores. Los computadores de un sistema distribuido se comunican entre s a
travs de diversos medios de comunicacin, tales como cables de alta velocidad o lneas
telefnicas. No comparten la memoria principal ni el reloj.
Los procesadores de un sistema distribuido pueden variar en cuanto su tamao y
funcin. Pueden incluir microcomputadores pequeos, estaciones de trabajo y sistemas
de computadores grandes de aplicacin general. Estos procesadores reciben diferentes
nombres, tales como localidades, nodos o computadores.
Un sistema distribuido de bases de datos consiste en un conjunto de localidades, cada
uno de las cuales puede participar en la ejecucin de transacciones que accedan a datos
de una o varias localidades. La diferencia principal entre los sistemas de base de datos
centralizados y distribuidos es que, en los primeros, los datos residen en una sola
localidad, mientras que, en los ltimos, se encuentran en varias localidades.
Relaciones "uno a uno"
Estas relaciones entre bases de datos se dan cuando cada campo clave aparece slo una
vez en cada una de las tablas.
Tomando un ejemplo del mundo real, una clara relacin de "uno a uno" podra ser, el
nombre de cualquier persona y su nmero de telfono. Si partimosdel supuesto en que
cada persona tiene un solo nmero de telfono, se podra hablar de una relacin "uno a
uno".
Grficamente, se podra representar de la siguiente manera:
Este tipo de relaciones se caracteriza poque cad uno de los campos define a aqul con el
que se relaciona. Es decir, conociendo el nombre de una persona podemos conocer su
nmero telefnico. O si sabemos su nmero telefnico, podemos identificar al dueo.
En estos cases, se suele aconsejar incluir todos los datos dentro de una sola tabla.
Relaciones de "uno a varios"
En este caso, lo aconsejable no es almacenar todos los datos en una sola tabla, sino lo
eficiente es hacerlo en tablas separadas, utilizando el identificador ID para relacionarlas.
Si estas tablas estn creadas en MySQL, la sentencia que nos ayudara a encontrar todos
los telfonos de una determinada persona sera:
SELECT n.nombre, t.telf
FROM nombre n
INNER JOIN telefonos t ON n.id = t.id
WHERE n.nombre = "Juan Timan"
Relaciones de "varios con varios"
La ltima de la relaciones que podemos encontrar es la de "varios con varios". Dado que
en la vida las cosas rara vez son sencillas, ste ser el tipo de relacin que nos
encontraremos ms a menudo.
Volviendo al tema de los tefonos, hemos encontrado la manera de relacionar cada una
de las personas con sus diversos telfonos: el de su casa, el de su empresa, el mvil.
Pero no ser extrao tener en nuestra base de datos diversas personas que trabajen en la
misma empresa, por lo que el nmero de su trabajo ser el mismo, o miembros de una
misma familia, por lo que compartirn el mismo telfono de su hogar.
Cmo tratar este tipo de relaciones? Si nos limistamos a repetir dicho nmero de
tablas, estaremos creando problemas de redundancia de datos, que a largo plazo
lastrarn la rapidez y eficacia de nuestras tablas.
Este tipo de relaciones podra ilustrarse de la siguiente manera:
Como vemos, cada elemento de la bas de datos puede relacionarse libremente con uno o
varios miembros de las distintas tablas.
En estos casos no hay una regla fija a la que podamos acogernos, pero lo aconsejable es
aproximarse lo ms posible a la realidad, y no dudar en establecer tablas intermedias
que nos ayuden a asociar mejor los datos.
Volviendo al tema de los telfonos, imaginemos que varias personas de nuestra tabla
trabajan en la misma empresa ACME Productions tiene varias lneas, por lo que los
nmeros de telfono de trabajo de estas personas seran varios. Cmo representarlo en
nuestra base de datos?
En este caso hemos creado una tabla intermedia llamada "empresas". En la tabla
"nombres" incluimos un nuevo campo TID, que se relaciona con la tabla "empresas", y
es esta tabla la que se relaciona directamente con los telfonos. De esta manera,
podemos almacenar todos los datos con facilidad sin tener que repetir un slo nmero
telefnico.
Conclusin
Por muy complicadas que parezcan las relaciones en el mundo real, tengamos por
seguro que cuando queramos plasmarlas en nuestra base de datos corresponder alguna
de las tres opciones que hemos presentado. Por ello, no dudemos en invertir el tiempo
que sea necesario hasta encontrar la combinacin de bases de datos ptima que nos
permita modelar la realidad sin repetir ninguno de los datos.
El tiempo que invirtamos en este proceso lo recuperaremos con creces durante el
proceso de programacin, pues nos facilitar enormemente las cosas.
Restricciones inherentes.
Cada atributo slo puede tomar un nico valor del dominio sobre el
que est definido, no admitindose los grupos repetitivos. Entonces
se dice que la tabla que cumple esta condicin normalizada(1 forma
normal)
Restricciones semnticas.
Unicidad
Obligatoriedad
Integridad referencial
El modelo relacional, al igual que el resto de modelos, permite realizar las siguientes
funciones desde un punto de vista dinmico:
Insercin de tuplas.
Borrado de tuplas.
Modificacin de tuplas.
Consultas.