lunes, 18 de julio de 2011

RELACION DE TABLAS

1. Relación de uno a uno:

Por cada registro de la tabla principal (tabla que contiene la clave principal) puede existir un sólo registro en la tabla relacionada (tabla que contiene la clave externa). La tabla relacionada no puede contener un registro que no esté relacionado con uno de la tabla principal: no puede existir un registro con FECHA_ALTA, SALARIO, etc., si no hay un empleado con el que se relacione. Más información en uno a uno. Esta relación se utiliza para simplicar y organizar las tablas con muchos campos. Ver el ejemplo siguiente:

http://www.aulapc.es/paginas/ofimatica/paginas/acces/relaciones/imagenes/uno-uno.png

nota: esta relación se indica: http://www.aulapc.es/paginas/ofimatica/paginas/acces/relaciones/imagenes/simbolo1-1.png

2. Relación de uno a varios:

Por cada registro de la tabla principal (tabla de la clave principal o lado uno de la relación) pueden existir muchos (infinitos) registros en la tabla relacionada (tabla de la clave externa o lado infinito de la relación). La tabla relacionada no puede contener un registro que no esté relacionado con uno de la tabla principal, pero pueden haber muchos registro que estén relacioandos con el mismo registro de la tabla principal: varios (infinitos) empleados de la tabla EMPLEADO_LABORAL, pueden estar en el mismo departamento de la tabla DEPARTAMENTO...

http://www.aulapc.es/paginas/ofimatica/paginas/acces/relaciones/imagenes/uno-varios.png

nota: esta relación se indica: http://www.aulapc.es/paginas/ofimatica/paginas/acces/relaciones/imagenes/simbolo1-2.png

Cómo funciona la integridad referencial con una base de datos de Oracle

La integridad referencial garantiza que las relaciones entre filas de tablas relacionadas son válidas y que no se eliminan o se cambian datos relacionados de forma accidental. Cuando se exige la integridad referencial en una base de datos de Oracle, se deben observar las reglas siguientes:

  • No puede especificar un valor en la columna de clave externa de la tabla relacionada si ese valor no existe en la clave principal de la tabla relacionada. Sin embargo, puede especificar un valor nulo en la columna de clave principal. Por ejemplo, no puede indicar que se asigna un trabajo a un empleado que no está incluido en la tabla EMPLOYEE, pero puede indicar que un empleado no tiene trabajo asignado mediante la especificación de un valor nulo en la columna JOB_ID de la tabla EMPLOYEE.
  • No puede eliminar una fila de una tabla de clave principal si existen filas que coinciden con ella en una tabla relacionada. Por ejemplo, no puede eliminar una fila de la tabla JOBS si hay empleados asignados al trabajo representado por esa fila en la tabla EMPLOYEE. No obstante, si están activadas las eliminaciones en cascada, puede eliminar una fila de clave principal y se eliminarán también todas las filas coincidentes en las tablas relacionadas.
  • No puede cambiar un valor de clave principal de la tabla de clave principal si esa fila tiene filas relacionadas. Por ejemplo, no puede eliminar un empleado de la tabla EMPLOYEE si ese empleado está asignado a un trabajo en la tabla JOBS.

Oracle sólo admite dos tipos de integridad referencial:

  • Activar la integridad referencial para comprobar los valores de las tablas relacionadas al especificar los datos. Si el valor del dato no está permitido (determinado por las reglas definidas anteriormente), se produce un error en la entrada de datos y no se agregan a la base de datos.
  • Eliminaciones en cascada.

SQL Server, por otro lado, admite algunas opciones adicionales de integridad referencial. En SQL Server puede establecer opciones para desactivar la restricción FOREIGN KEY bajo las siguientes condiciones:

  • Tras la creación, para comprobar los datos existentes.
  • Durante transacciones INSERT y UPDATE.
  • Durante la duplicación.

La integridad de los datos es la propiedad que asegura que información dada es correcta, al cumplir ciertas aserciones.

Las restricciones de integridad aseguran que la información contenida en una base de datos es correcta.

Las restricciones de integridad son propiedades de la base de datos que se deben satisfacer en cualquier momento.

Oracle es un sistema de gestión de base de datos (SGBD) relacional que permite la definición de restricciones de integridad dentro del diseño de su base de datos al ser creada.

Las restricciones de integridad aseguran que la información contenida en la base de datos cumple ciertas restricciones para los diferentes estados.

Existen dos tipos de restricciones:

· Estáticas: limitan los estados permitidos de la Base de Datos.

· Dinámicas: restringen las posibles transiciones de estados de la base datos.

Para incorporar el tratamiento de las restricciones de integridad en el sistema pueden realizarse:

· Añadiendo código adicional para verificar y asegurar que se cumplen las restricciones.

· Declarando las restricciones como parte del esquema de la base de datos.

La definición en la fase de diseño de las restricciones de integridad proporciona mayor número de ventajas, ya que:

· Reduce el costo de desarrollo de software.

· Es más confiable al ser centralizado y uniforme.

· Mantenimiento más fácil.

De acuerdo con la forma de especificación del comando CREATE TABLE dada anteriormente, la cláusula puede entonces tener las siguientes formas:

http://www.paginasprodigy.com.mx/evaristopacheco/images/diamante.gif

CONSTRAINT PRIMARY KEY ([,])

http://www.paginasprodigy.com.mx/evaristopacheco/images/diamante.gif

CONSTRAINT UNIQUE ([,])

http://www.paginasprodigy.com.mx/evaristopacheco/images/diamante.gif

CONSTRAINT FOREIGN KEY ([,]) REFERENCES

http://www.paginasprodigy.com.mx/evaristopacheco/images/diamante.gif

CONSTRAINT CHECK ()

Donde:

http://www.paginasprodigy.com.mx/evaristopacheco/images/diamante.gif

es el nombre con el que se designará al “constraint" en el esquema donde se crea la tabla que lo incluye.

http://www.paginasprodigy.com.mx/evaristopacheco/images/diamante.gif

es el nombre de una columna de la tabla en la que se define el “constraint"

1

<table_name> es el nombre de una tabla definida en el esquema donde existe la tabla que incluye el “constraint".

http://www.paginasprodigy.com.mx/evaristopacheco/images/diamante.gif

<condition> es una expresión lógica de SQL.

En el manual de referencia de SQL usted podrá encontrar información sobre las reglas de formación de expresiones lógicas de SQL.

Un punto importantísimo a destacar es el de garantizar que los nombres de los “constraints" sean nemónicos. Toda vez que un "constraint" sea violado, el SGBD generará un mensaje de error indicando el “constraint" que ha fallado. Asignar nombres nemónicos permitirá hacer la depuración de programas y la carga de datos mucho más sencilla, además de garantizar una perfecta cohesión entre el esquema de implantación y la documentación del esquema lógico.


Es así como se sugiere utilizar el siguiente estándar de nomenclatura:

1

Para restricciones de no-nulidad se recomienda no crear “constraints" sino declarar la no-nulidad al momento de crear la tabla y para cada columna. Esto se debe al hecho de que el módulo de chequeo de integridad de ORACLE no utiliza el nombre de la restricción de integridad para indicar que el valor de una columna en una fila deba ser nulo si se indica lo contrario.

1

Para asociar un “constraint" de clave primaria a una tabla <table_name> se recomienda designar el “constraint" con el nombre PK_.

1

Para asociar un “constraint" de unicidad relacionado con una clave alterna de la tabla<table_name>, se recomienda designar el “constraint" con el nombre AK_. Si existen varias claves alternas podrá agregársele al nombre del “constraint" un indicador que permita diferenciar cada una de estas claves alternas.

1

Para asociar un “constraint" de clave foránea a una tabla <table_name1> que referencia a una tabla <table_name2> designe el “constraint" con el nombre FK__. Si existen múltiples claves foráneas en la tabla<table_name1> que referencia a la tabla <table_name2> entonces será necesario colocar algún indicador que permita diferenciar cada uno de los “contraints". Un posible nombre a utilizar será el nombre de la interrelación (y en rol en caso de interrelaciones recursivas) del esquema conceptual a partir de la cual se generó la clave foránea que define el "constraint"

1

Asociar un “constraint" que represente una restricción de dominio sobre una columna <column_name> de una tabla <table_name>, se sugiere utilizar D___ como nombre del “constraint"

1

Para asociar un “constraint" que represente una restricción explícita, descrita a través de una restricciôn de tipo CHECK, de una tabla <table_name> useEXP___R como nombre del “constraintconstraint_number> representará el número de restricción explícita asociado en la documentación del esquema relacional que se implanta.

Los “constraints" pueden ser agregados a una tabla previamente creada, o eliminados de una tabla existente. Para tal fin se pueden utilizar dos variaciones del comando ALTER TABLE, cuya sintaxis a continuación se indica:


ALTER TABLE ADD ( [,]);

Permitirá agregar una o más “constraints" a la tabla existente en la base de datos. Cada uno de los “constraints" que se añaden a la tabla seguirán las convenciones sintácticas de la cláusula <table_constraint>.


ALTER TABLE DROP CONSTRAINT [CASCADE];

Eliminará de la tabla <table_name> la restricción <constraint_name>. Si se utiliza la cláusula CASCADE, la eliminación del “constraint” tendrá como efecto eliminar cualquier otro “constraint" que esté relacionado con el "constraint" que se elimina. Por ejemplo, si se elimina un "constraint" de clave primaria de una tabla A bajo modalidad “constraint" entonces se eliminarán los "constraints" de clave foránea que referencien a A.

SOBRE LÍMITES


ORACLE impone los siguientes límites en lo que respecta a los objetos descritos en esta sección:


La longitud de cualquier identificador (nombre de tabla, nombre de columna, nombre de "constraints", entre otros) se limita a un máximo de 30 caracteres.


El número máximo de columnas que puede tener una tabla es de 1000.

El número máximo de columnas que pueden constituir una clave primaria, una clave alterna o una clave foránea es de 16.

Considere los siguiente ejemplos:

Departamento Empleado

http://www.paginasprodigy.com.mx/evaristopacheco/taller/imagenes/DER_DepartamentoEmpleado.jpg

http://www.paginasprodigy.com.mx/evaristopacheco/taller/imagenes/DepartamentoEmpleado.jpg

Futbol

http://www.paginasprodigy.com.mx/evaristopacheco/taller/imagenes/DER_FMF.jpg

http://www.paginasprodigy.com.mx/evaristopacheco/taller/imagenes/futbol.jpg

Proyectos de investigación

http://www.paginasprodigy.com.mx/evaristopacheco/taller/imagenes/DER_LineaProyectoAsignadoLibro.jpg

http://www.paginasprodigy.com.mx/evaristopacheco/taller/imagenes/proyecto.jpg

3. Relación de varios a varios:

Debes tener claro las llaves primarias y una tabla de unión para que se produzca la relación varios a varios entre PRODUCTOS y NUM_VENTA. Un registro de la tabla NUM_VENTA puede estar relacionado con varios registros de la tabla PRODUCTOS y un registro de la tabla PRODUCTOS puede estar relacionado con varios registros de la tabla NUM_VENTA. Explicación: cuando realizamos una venta le asignamos un número (N_VENTA) y lo almacenamos en la tabla NUM_VENTA; esa venta puede estar formada por uno o varios productos identificados con un numero de producto (N_PRODUCTO) de la tabla PRODUCTOS. Más información.

Pero, ¿cómo podemos relacionar varios registros de la tabla NUM_VENTA con varios de PRODUCTOS, y viceversa?. En realidad esta relación está formada por dos relaciones de uno a muchos. Una tabla intermedia (tabla de unión VENTAS) contiene la clave principal múltiple que se forma con la conbinación de dos (o más) claves externas: N_VENTA y N_PRODUCTO. La combinación de estos dos campos forma un campo que no se repite. Por ejemplo: la venta 200 (N_VENTA vale 200) se realizó con los productos 12, 14 y 36 (N_PRODUCTO). Si formamos con N_VENTA y N_PRODUCTO una clave principal obtenemos 20012, 20014 y 20036, valores no repetidos. Con otros valores de N_VENTA se prcedería igual.

http://www.aulapc.es/paginas/ofimatica/paginas/acces/relaciones/imagenes/varios-varios.png

No hay comentarios:

Publicar un comentario