Ventanas.  virus  Cuadernos.  Internet.  oficina.  Utilidades.  Conductores

SE APLICA A: SQL Server (a partir de 2016)Azure SQL DatabaseAzure SQL Data WarehouseParallel Data Warehouse

Las claves primarias y externas son dos tipos de restricciones que se pueden usar para hacer cumplir la integridad de los datos en tablas SQL servidor. Estos son objetos importantes de la base de datos.

Este tema se describe en las siguientes secciones.

Restricciones de clave principal

Restricciones de clave externa

Tareas relacionadas

Normalmente, una tabla tiene una columna o combinación de columnas que contiene valores que identifican de forma única cada fila de la tabla. Esta columna, o columnas, se denomina clave principal (PK) de la tabla y proporciona la integridad de la entidad de la tabla. Las restricciones de clave principal a menudo se definen en una columna de identidad porque garantizan la unicidad de los datos.

Cuando establece una restricción de clave principal en una tabla, el Motor de base de datos garantiza la unicidad de los datos al creación automáticaíndice único en columnas de clave principal. Este índice también proporciona un acceso rápido a los datos cuando se utiliza la clave principal en las consultas. Si se define una restricción de clave principal en más de una columna, los valores se pueden duplicar dentro de la misma columna, pero cada combinación de valores de todas las columnas en la definición de restricción de clave principal debe ser única.

Como se muestra en la siguiente figura, las columnas ID del Producto Y Id. de proveedor en la mesa Compras.ProductVendor formar una restricción de clave primaria compuesta para la tabla dada. Esto asegura que cada fila en la tabla Proveedor de productos tiene una combinación única de valores ID del Producto Y Id. de proveedor. Esto evita la inserción de filas duplicadas.

    Una tabla solo puede tener una restricción de clave principal.

    La clave principal no puede tener más de 16 columnas y la longitud total de la clave no puede exceder los 900 bytes.

    Un índice formado por una restricción de clave principal no puede hacer que la cantidad de índices en una tabla supere los 999 índices no agrupados y 1 índice agrupado.

    Si la restricción de clave principal no especifica si el índice está agrupado o no agrupado, se crea un índice agrupado si no existe uno en la tabla.

    Todas las columnas con una restricción de clave principal deben definirse como no anulables. Si no se especifica la posibilidad de nulos, todas las columnas con una restricción de clave principal se establecen como no anulables.

    Si se define una clave principal en una columna de un tipo de datos definido por el usuario de CLR, la implementación del tipo debe admitir la clasificación binaria.

Una clave externa (FK) es una columna o combinación de columnas que se utiliza para forzar una relación entre los datos de dos tablas para controlar los datos que se pueden almacenar en la tabla de clave externa. Si se hace referencia a una o más columnas que contienen la clave principal de una tabla en una o más columnas de otra tabla, se crea una relación en la referencia de clave externa entre las dos tablas. Esta columna se convierte en una clave externa en la segunda tabla.

Por ejemplo tabla Ventas.SalesOrderHeader vinculado a la tabla Ventas.Vendedor utilizando una clave externa porque existe una relación lógica entre las órdenes de venta y los vendedores. Columna ID de vendedor en la mesa Ventas.SalesOrderHeader coincide con la columna de clave principal en la tabla persona de ventas. Columna ID de vendedor en la mesa Ventas.SalesOrderHeader es una clave foránea para la tabla persona de ventas. Al establecer esta relación por clave foránea, el valor para ID de vendedor no se puede insertar en la tabla Encabezado de pedido de ventas si no está actualmente en la tabla persona de ventas.

La cantidad máxima de tablas y columnas a las que una tabla puede hacer referencia como claves externas (enlaces salientes) es 253. SQL Server 2016 aumenta el límite en la cantidad de otras tablas y columnas que pueden hacer referencia a columnas en la misma tabla (enlaces entrantes) de 253 hasta 10 000. (Requiere un nivel de compatibilidad de al menos 130.) El aumento tiene las siguientes limitaciones:

    Superar las 253 referencias de clave externa solo se admite para operaciones DML DELETE. Las operaciones UPDATE y MERGE no son compatibles.

    Más de 253 referencias de clave externa no están disponibles actualmente para índices de almacén de columnas, tablas optimizadas para memoria, base de datos ampliada o tablas de clave externa particionada.

Índices en restricciones de clave externa

A diferencia de las restricciones de clave principal, la creación de una restricción de clave externa no crea automáticamente un índice correspondiente. Sin embargo, a menudo es necesario crear manualmente un índice en una clave externa por las siguientes razones:

    Las columnas de clave externa a menudo se usan en criterios de combinación cuando se usan juntas en consultas de datos de tablas relacionadas. Lo hace asignando una columna o columnas en una restricción de clave externa en una tabla a una o más columnas de clave principal o única en otra tabla. Un índice permite que el Motor de base de datos encuentre rápidamente datos relacionados en una tabla de clave externa. Sin embargo, crear un índice es opcional. Los datos de dos tablas relacionadas se pueden combinar incluso si no hay restricciones de clave principal o clave externa definidas entre las tablas, pero una relación de clave externa entre dos tablas muestra que las dos tablas están optimizadas para usarse juntas en una consulta donde las claves son utilizado como criterio.

    Las restricciones de clave externa en tablas relacionadas verifican los cambios en las restricciones de clave principal.

Integridad referencial

El objetivo principal de una restricción de clave externa es controlar los datos que se pueden almacenar en la tabla de clave externa, pero esta restricción también controla la modificación de los datos en la tabla de clave principal. Por ejemplo, al eliminar una fila para un gerente de ventas de una tabla Ventas.Vendedor cuyo ID se utiliza en los pedidos de venta de la tabla Ventas.SalesOrderHeader, se violará la integridad referencial de las dos tablas. Órdenes de venta del administrador remoto en una tabla Encabezado de pedido de ventas deja de ser válido sin un enlace a los datos de la tabla persona de ventas.

La restricción de clave externa evita que ocurra esta situación. Una restricción impone la integridad referencial de la siguiente manera: prohíbe la modificación de datos en la tabla de clave principal si dicha modificación invalidaría la referencia en la tabla de clave externa. Si al intentar eliminar una fila en la tabla de clave principal o cambiar el valor de esta clave, se encuentra que el valor eliminado o modificado de la clave principal corresponde a cierto valor en una restricción de clave externa en otra tabla, no se realizará ninguna acción. Para actualizar o eliminar correctamente una fila con una restricción de clave externa, primero debe eliminar los datos de clave externa en la tabla de clave externa o modificar los datos en la tabla de clave externa que vincula la clave externa con otros datos de clave principal.

Integridad referencial en cascada

Puede usar restricciones de integridad referencial en cascada para definir las acciones que el Motor de base de datos realizará cuando un usuario intente eliminar o actualizar una clave a la que aún apuntan claves externas. Se pueden definir las siguientes acciones en cascada.

SIN ACCIÓN
Motor de base de datos genera un error y luego se revierte la operación de eliminación o actualización en la fila de la tabla principal.

CASCADA
Las filas correspondientes se actualizan o eliminan de la tabla de referencia si cadena dada se actualiza o elimina de la tabla principal. No se puede especificar el valor CASCADE si la columna es de tipo marca de tiempo es parte de una clave foránea o de referencia. La acción ON DELETE CASCADE no se puede especificar en una tabla que tenga definido un activador INSTEAD OF DELETE. La cláusula ON UPDATE CASCADE no se puede utilizar en tablas que tienen disparadores INSTEAD OF UPDATE.

ESTABLECER NULO
Todos los valores que componen una clave externa se establecen en NULL cuando se actualiza o elimina la fila correspondiente en la tabla principal. Las columnas de clave externa deben admitir valores NULL para que se aplique esta restricción. No se puede configurar para tablas que tienen definidos activadores INSTEAD OF UPDATE.

ESTABLECER PREDETERMINADO
Todos los valores que componen una clave externa se establecen en su valor predeterminado cuando se elimina o actualiza la fila correspondiente en la tabla principal. Para cumplir con esta restricción, todas las columnas de clave externa deben tener definiciones predeterminadas. Si la columna admite valores NULL y no se define explícitamente ningún valor predeterminado, el valor predeterminado de la columna se convierte en NULL. No se puede configurar para tablas que tienen definidos activadores INSTEAD OF UPDATE.

Las palabras clave CASCADE, SET NULL, SET DEFAULT y NO ACTION se pueden combinar en tablas que tienen referencias mutuas. Si Motor de base de datos encuentra la palabra clave NO ACTION, detendrá y revertirá las operaciones asociadas CASCADE, SET NULL y SET DEFAULT. Si una instrucción DELETE contiene una combinación de las palabras clave CASCADE, SET NULL, SET DEFAULT y NO ACTION, todas las operaciones CASCADE, SET NULL y SET DEFAULT se ejecutan antes de que Motor de base de datos busque una operación NO ACTION.

Desencadenadores y acciones de enlace en cascada

Las acciones referenciales en cascada se activan DESPUÉS DE ACTUALIZAR o DESPUÉS DE ELIMINAR disparadores como este:

    Todas las acciones referenciales en cascada causadas directamente por la instrucción DELETE o UPDATE original se ejecutan primero.

    Si hay activadores DESPUÉS definidos en las tablas modificadas, esos activadores se activan después de que se hayan llevado a cabo todas las acciones en cascada. Estos disparadores se ejecutan en el orden inverso de las acciones en cascada. Si se definen varios disparadores para la misma tabla, se activan en orden aleatorio, a menos que se especifique un primer y último disparador de tabla dedicados. Este orden está determinado por el procedimiento.

    Si las secuencias de acción en cascada se originan en una tabla que fue el destino inmediato de una acción ELIMINAR o ACTUALIZAR, el orden en que esas secuencias de acción activan los disparadores no está definido. Sin embargo, una secuencia de acción siempre activa todos sus disparadores antes de que lo haga la siguiente.

    Un activador AFTER en una tabla que es el destino inmediato de una acción DELETE o UPDATE se activa independientemente de si se ha modificado alguna fila. En este caso, ninguna otra tabla se ve afectada por la cascada.

    Si uno de los desencadenantes anteriores realiza operaciones de ELIMINACIÓN o ACTUALIZACIÓN en otras tablas, esas operaciones pueden desencadenar sus propias secuencias de acción en cascada. Estos flujos de trabajo secundarios se procesan para cada operación de ELIMINACIÓN o ACTUALIZACIÓN después de que se hayan ejecutado todos los activadores de los flujos de trabajo principales. Este proceso se puede repetir de forma recursiva para operaciones posteriores de ELIMINACIÓN o ACTUALIZACIÓN.

    Ejecutar CREAR, ALTERAR, ELIMINAR u otras operaciones DDL dentro de los disparadores puede hacer que se activen los disparadores DDL. Esto puede dar lugar a más operaciones de ELIMINACIÓN o ACTUALIZACIÓN, que iniciarán secuencias en cascada adicionales y activarán sus propios disparadores.

    Si ocurre un error en cualquier secuencia particular de acciones de referencia en cascada, no se activará ningún disparador AFTER en esa secuencia y se revertirán las operaciones DELETE o UPDATE generadas por esa secuencia.

    Una tabla en la que se define un disparador INSTEAD OF también puede tener una cláusula REFERENCES que especifica una acción en cascada específica. Sin embargo, un activador DESPUÉS en la tabla de destino de la acción en cascada puede ejecutar una instrucción INSERTAR, ACTUALIZAR o ELIMINAR en otra tabla o vista, lo que activará un activador INSTEAD OF en ese objeto.

La siguiente tabla enumera las tareas comunes relacionadas con las restricciones de clave principal y clave externa.

Así es como abordamos imperceptiblemente un tema muy importante: claves primarias y externas. Si los primeros son utilizados por casi todo el mundo, los últimos se ignoran por alguna razón. Pero en vano. Las claves foráneas no son un problema, son una verdadera ayuda en la integridad de los datos.

1.2.5. Clave primaria

Ya hemos hablado mucho sobre los campos clave, pero nunca los hemos usado. Lo más interesante es que todo funcionó. Esta es una ventaja, o tal vez una desventaja de la base. datos de microsoft Servidor SQL y MS Access. En las tablas de Paradox, este truco no funcionará y, sin la presencia de un campo clave, la tabla será de solo lectura.

Hasta cierto punto, las claves son restricciones, y podrían considerarse junto con la declaración CHECK, porque la declaración ocurre de manera similar e incluso se usa la declaración CONSTRAINT. Veamos este proceso con un ejemplo. Para ello, crearemos una tabla de dos campos "guid" y "vcName". En este caso, el campo "guid" se establece como clave principal:

CREAR TABLA Globally_Unique_Data (identificador único guid DEFAULT NEWID(), vcName varchar(50), CONSTRAINT PK_guid PRIMARY KEY (Guid))

Lo más sabroso aquí es la línea CONSTRAINT. Como sabemos, después de eso palabra clave viene el nombre de la restricción, y la clave de declaración no es una excepción. Para nombrar una clave principal, recomiendo usar PK_name, donde nombre es el nombre del campo que debe convertirse en la clave maestra. La abreviatura PK proviene de Primary Key (clave primaria).

Después de eso, en lugar de la palabra clave CHECK, que usamos en las restricciones, hay una instrucción PRIMARY KEY, que indica que no necesitamos un control, sino una clave principal. Los corchetes indican uno o más campos que conformarán la clave.

Recuerde que dos filas no pueden tener el mismo valor en un campo clave, en este caso, la restricción de clave principal es idéntica a la restricción única. Esto significa que si hace que el campo para almacenar el apellido sea la clave principal, entonces no será posible escribir dos Ivanov con nombres diferentes en dicha tabla. Esto viola la restricción de clave principal. Esta es la razón por la que las claves son restricciones y se declaran igual que la restricción CHECK. Pero esto no es cierto solo para claves primarias y claves secundarias con unicidad.

EN este ejemplo, la clave principal es un campo de tipo identificador único (GUID). El valor predeterminado para este campo es el resultado de ejecutar el procedimiento del servidor NEWID.

Atención

Solo se puede crear una clave principal para una tabla

Para simplificar los ejemplos, es conveniente utilizar como clave un tipo numérico, y si la base de datos lo permite, será mejor que sea del tipo "autoincremental" (número que aumenta/disminuye automáticamente). En MS SQL Server, dicho campo es IDENTIDAD, y en MS Access es un campo del tipo "contador".

El siguiente ejemplo muestra cómo crear una tabla de productos con un campo entero de incremento automático como clave principal:

CREAR TABLA Productos (id int IDENTIDAD (1, 1), producto varchar (50), Precio monetario, Cantidad numérica (10, 2), RESTRICCIÓN PK_id CLAVE PRINCIPAL (id))

Es este tipo de clave el que usaremos más a menudo, porque los números que son fáciles de leer se almacenarán en el campo clave y es más fácil y visual trabajar con ellos.

La clave principal puede contener más de una columna. El siguiente ejemplo crea una tabla en la que los campos "id" y "Producto" forman la clave principal, lo que significa que se creará un índice único en ambos campos:

CREAR TABLA Productos1 (id int IDENTIDAD (1, 1), Producto varchar (50), Precio monetario, Cantidad numérica (10, 2), RESTRICCIÓN PK_id CLAVE PRINCIPAL (id, [Nombre del producto]))

Muy a menudo, los programadores crean una base de datos con un campo clave en forma de número entero, pero al mismo tiempo está claro en la tarea que ciertos campos deben ser únicos. Y por qué no crear inmediatamente una clave principal a partir de esos campos que deberían ser únicos y no será necesario crear soluciones separadas para este problema.

El único inconveniente de una clave principal de varias columnas es el problema de crear relaciones. Aquí tienes que salir por varios métodos, pero el problema aún tiene solución. Solo necesita ingresar un campo de tipo identificador único y hacer una conexión en él. Sí, en este caso, obtenemos una clave principal única y un campo de tipo identificador único, pero esta redundancia como resultado no será mayor que la misma tabla donde la clave principal es identificador único y se establecen restricciones de unicidad en campos que deberían ser único. ¿Qué elegir? Depende de tarea específica y lo que mejor te funcione.

1.2.6. Clave externa

Una clave externa también es una restricción CONSTRAINT y representa una relación entre dos tablas. Digamos que tienes dos tablas:

  • Nombres: contiene nombres de personas y consta de campos de identificador (campo clave), nombre.
  • Teléfonos es una tabla de teléfonos que consta de un identificador (campo clave), una clave externa para vincular a la tabla de nombres y un campo de cadena para almacenar el número de teléfono.

Una persona puede tener varios teléfonos, por lo que hemos separado el almacenamiento de datos en diferentes tablas. La figura 1.4 muestra visualmente la relación entre las dos tablas. Si ya ha trabajado con tablas vinculadas, esto será suficiente para usted. Si escucha acerca de las conexiones por primera vez, intentemos analizar el problema más de cerca.

Por ejemplo, tomemos una mesa de tres personas. La Tabla 1.3 muestra el contenido de la tabla "Nombres". Solo hay tres líneas, y cada una tiene su propia clave maestra única. Por singularidad, cuando creamos la tabla, haremos que la clave sea un campo que se incremente automáticamente.

Tabla 1.3 Contenido de la tabla Nombres

Tabla 1.4. El contenido de la tabla Teléfonos

La tabla 1.4 contiene cinco números de teléfono. El campo de clave maestra también tiene una clave maestra única, que también puede incrementarse automáticamente. La clave secundaria es una relación con la clave principal de la tabla Nombres. ¿Cómo funciona esta conexión? Petrov tiene como clave principal en la tabla Nombres el número 1. En la tabla Teléfonos, buscamos el número 1 en la clave secundaria y obtenemos los números de teléfono de Petrov. Lo mismo ocurre con el resto de las entradas. Visualmente, la conexión se puede ver en la Figura 1.5.

Tal almacenamiento de datos es muy conveniente. Si no fuera posible crear tablas vinculadas, en la tabla Nombres tendríamos que completar todos los números de teléfono en un campo. Esto es inconveniente en términos de uso, soporte y recuperación de datos.

Puede crear varios campos de Nombres en una tabla, pero la pregunta es cuántos. Una persona puede tener solo 1 teléfono y yo, por ejemplo, tengo 3, sin contar los trabajadores. Un gran número de campos conduce a la redundancia de datos.

Es posible que cada teléfono en la tabla Nombres tenga una línea separada con el apellido, pero esto es fácil solo para un ejemplo tan simple, cuando necesita ingresar solo el apellido y puede hacer fácilmente varias entradas para Petrov con varios números de teléfono. ¿Y si hay 10 o 20 campos? Así, la creación de dos tablas enlazadas por una clave foránea se puede ver en el listado 1.6.

Listado 1.6. Creación de tablas enlazadas por una clave foránea

CREATE TABLE Nombres (idName int IDENTITY(1,1), vcName varchar(50), CONSTRAINT PK_guid PRIMARY KEY (idName),) CREATE TABLE Phones (idPhone int IDENTITY(1,1), idName int, vcPhone varchar(10), RESTRICCIÓN PK_idPhone CLAVE PRINCIPAL (idPhone), RESTRICCIÓN FK_idName CLAVE EXTRANJERA (idName) REFERENCIAS Nombres (idName))

Lea atentamente el contenido de la lista. Es lo suficientemente interesante porque usa algunos de los operadores que ya hemos cubierto y ejemplo adicional no prevenir Para ambas tablas, se crea un campo clave que viene primero, es de tipo int y se incrementa automáticamente desde 1 en incrementos de uno. El campo clave se convierte en la clave maestra con una restricción CONSTRAINT.

En la descripción de la tabla Phones, la última línea contiene una nueva declaración para nosotros, es decir, una declaración de clave externa que utiliza el operador FOREIGN KEY. Como puede ver, esto también es una limitación, y verá por qué un poco más adelante. Los corchetes indican el campo de la tabla que debe vincularse a otra tabla. A esto le sigue la palabra clave REFERENCIAS (referencia), el nombre de la tabla con la que se debe relacionar (Nombres) y entre paréntesis el nombre del campo ("idName"). Por lo tanto, hemos establecido una conexión, que se muestra en la Figura 1.4.

¡Atención!

Una clave externa solo puede referirse a la clave principal de otra tabla o a una restricción única. Esto significa que la palabra clave REFERENCIAS debe ir seguida del nombre de la tabla, y solo se puede especificar entre paréntesis la clave principal o un campo con una restricción ÚNICA. No se pueden especificar otros campos.

Ahora, si puedes llenar las tablas con datos. Los siguientes tres comandos agregan los tres apellidos que vimos en la Tabla 1.3:

INSERTAR EN Nombres(vcName) VALORES("Petrov") INSERTAR EN Nombres(vcName) VALORES("Ivanov") INSERTAR EN Nombres(vcName) VALORES("Sidorov")

Si ya ha trabajado con SQL, también puede agregar entradas para la tabla de teléfonos. Omitiré estos comandos, pero puede verlos en el archivo Foreign_keys.sql en el directorio del Capítulo 1 del CD.

Nuestra tarea ahora es ver cuáles son las acciones restrictivas de una clave externa, vamos a resolverlo. Hemos indicado una relación explícita entre dos campos en diferentes tablas. Si intenta agregar un registro a la tabla de teléfonos con un identificador en el campo "idName" que no existe en el campo del mismo nombre (el nombre podría haberse hecho diferente) en la tabla con apellidos, ocurrirá un error . Esto romperá la relación entre las dos tablas, y la restricción de clave externa evitará que existan registros sin una relación.

La restricción también se aplica al cambiar o eliminar registros. Por ejemplo, si intenta eliminar la fila con el apellido Petrov, obtendrá un error de restricción de clave externa. No puede eliminar registros que tengan filas relacionadas externamente. Primero, debe eliminar todos los teléfonos para esta entrada, y solo después de eso será posible eliminar la línea con el nombre Petrov.

Durante la creación de la clave externa, se puede especificar ON DELETE CASCADE o ON UPDATE CASCADE. En este caso, si elimina el registro Petrov de la tabla Nombres o cambia el identificador, todos los registros de la tabla Teléfonos asociados con la fila Petrov se actualizarán automáticamente. Nunca. No, tienes que escribir letras mayúsculas R: NUNCA hagas esto. Todo debe ser eliminado o cambiado manualmente. Si el usuario elimina accidentalmente una entrada de la tabla Nombres, también se eliminarán los teléfonos correspondientes. ¡Entonces tiene sentido crear una clave externa si la mitad de su poder restrictivo desaparece! Todo debe hacerse solo manualmente, y no se recomienda cambiar los identificadores en absoluto.

La eliminación de las propias tablas también debe comenzar con la tabla secundaria, es decir, con Teléfonos, y solo entonces se puede eliminar la tabla principal de Nombres.

Finalmente, te mostraré cómo hacer coincidir bellamente nombres y números de teléfono de dos tablas:

SELECCIONE vcName, vcPhone FROM Nombres, Teléfonos DONDE Names.idName=Teléfonos.idName

Hablaremos más sobre este tipo de consultas en el Capítulo 2. Por ahora, he incluido un ejemplo solo para mostrarle el poder de las tablas vinculadas.

Una tabla puede contener hasta 253 claves externas, lo que es suficiente incluso para las bases de datos más complejas. En lo personal, tuve que trabajar con bases de datos donde el número de claves foráneas no superaba las 7 por tabla. Si es más, lo más probable es que la base de datos esté diseñada incorrectamente, aunque hay excepciones.

La tabla en sí también puede tener un máximo de 253 claves foráneas. Las claves foráneas en una tabla son menos comunes, en su mayoría no más de 3. La mayoría de las veces, una tabla puede tener muchos enlaces a otras tablas.

Una clave externa puede hacer referencia a la misma tabla en la que se crea. Por ejemplo, tiene una tabla de posiciones en una organización, como se muestra en la tabla 1.5. La tabla consta de tres campos: clave principal, clave externa y cargo. Puede haber muchos puestos en cualquier organización, pero sería bastante lógico mostrar sus nombres y estructura de subordinación en una tabla. Para ello se debe asociar la clave foránea con la clave primaria de la tabla de trabajos.

Tabla 1.5. Tabla con enlace interno

Como resultado, obtenemos que el CEO tiene una clave externa cero, es decir esta posición está a la cabeza de todas las demás. Para el director comercial y el director de asuntos generales, la clave externa apunta a la fila del director general. Esto significa que estas dos posiciones reportan directamente al CEO. Etcétera.

Veamos cómo podemos crear todo esto en forma de consulta SQL:

CREATE TABLE Positions (idPosition int IDENTITY(1,1), idParentPosition int, vcName varchar(30), CONSTRAINT PK_idPosition PRIMARY KEY (idPosition), CONSTRAINT FK_idParentPosition FOREIGN KEY (idParentPosition) REFERENCES Positions (idPosition))

Como puede ver, la clave externa simplemente se refiere a la misma tabla que estamos creando. En el CD, en el directorio Capítulo 1, puede ver en el archivo Foreign_keys_to_self.sql un ejemplo de cómo crear esta tabla, llenarla con datos y mostrar posiciones, teniendo en cuenta su subordinación. En el próximo capítulo, veremos la posibilidad de trabajar con tales tablas con más detalle.

Relación uno a uno

Hasta ahora, hemos considerado la relación clásica, cuando una fila de la tabla de datos principal corresponde a una fila de la tabla asociada. Tal relación se llama uno a muchos. Pero hay otras relaciones, y ahora consideraremos otra: uno a uno, cuando un registro en la tabla principal está relacionado con un registro en otro. Para implementar esto, basta con vincular las claves primarias de ambas tablas. Dado que las claves principales no se pueden repetir, solo se puede relacionar una fila en ambas tablas.

El siguiente ejemplo crea dos tablas que tienen una relación entre claves primarias:

CREATE TABLE Nombres (idName identificador único DEFAULT NEWID(), vcName varchar(50), CONSTRAINT PK_guid PRIMARY KEY (idName)) CREATE TABLE Teléfonos (idPhone identificador único DEFAULT NEWID(), vcPhone varchar(10), CONSTRAINT PK_idPhone PRIMARY KEY (idPhone), RESTRICCIÓN FK_idPhone CLAVE EXTERNA (idPhone) REFERENCIAS Nombres (idName))

Solo una de las tablas necesita una clave externa. Dado que la relación es uno a uno, no importa en qué tabla crearla.

muchos a muchos

La relación más compleja es de muchos a muchos, donde muchos registros de una tabla coinciden con muchos registros de otra tabla. Para implementar esto, dos tablas no son suficientes, se necesitan tres tablas.

Primero, debe comprender cuándo se puede usar una relación de muchos a muchos. Supongamos que tiene dos tablas: una lista de residentes de la casa y una lista de números de teléfono. Puede haber más de un número en un apartamento, lo que significa que dos teléfonos pueden pertenecer al mismo apellido. Así que es una relación de uno a muchos. Por otro lado, puede haber dos familias en un apartamento (piso común o solo un inquilino que usa el teléfono del propietario), lo que significa que la relación entre el teléfono y el residente también es de uno a muchos. Y la opción más difícil es tener dos teléfonos en un piso común. En este caso, varios residentes del apartamento utilizan ambos números. Entonces resulta que "muchas" familias pueden usar "muchos" teléfonos (comunicación de muchos a muchos).

¿Cómo implementar una relación de muchos a muchos? A primera vista, esto es imposible en el modelo relacional. Hace 10 años estaba buscando diferentes variantes y, como resultado, acaba de crear una tabla que estaba repleta de redundancia de datos. Pero un día, recibí una tarea, gracias a la cual ya surgió una excelente solución de la condición: debe crear dos tablas de residentes de apartamentos y teléfonos e implementar solo la clave principal en ellos. Las claves foráneas no son necesarias en esta tabla. Y aquí la comunicación entre mesas tiene que ser a través de la tercera mesa de conexión. A primera vista, esto es difícil y no está claro, pero una vez que comprenda este método, verá todo el poder de esta solución.

Las tablas 1.6 y 1.7 muestran ejemplos de tablas de apellidos y teléfonos, respectivamente. Y la tabla 1.8 muestra una tabla de enlaces.

Tabla 1.6. Tabla de apellidos

Tabla 1.7. Mesa de telefono

Tabla 1.8. Mesa de telefono

Veamos ahora cuál será la lógica de búsqueda de datos en una relación de muchos a muchos. Digamos que necesitamos encontrar todos los teléfonos que pertenecen a Ivanov. Ivanov tiene una clave primaria igual a 1. Encontramos en la tabla de enlace todos los registros en los que el campo "Relación con el nombre" es igual a 1. Estos serán los registros 1 y 2. En estos registros, se encuentran los identificadores 1 y 2 en el campo "Relación con el teléfono", respectivamente, por lo que Ivanov posee los números de la tabla de teléfonos, que se encuentran en las filas 1 y 2.

Ahora resolvamos el problema inverso: determine quién tiene acceso al número de teléfono 567575677. Este número en la tabla de teléfonos tiene una clave de 3. Estamos buscando todos los registros en la tabla de enlaces, donde el campo "Conexión con teléfono" es igual al 3. Son registros con los números 4 y 5, que en el campo “Relación con el nombre” contienen los valores 2 y 3, respectivamente. Si mira ahora la tabla de apellidos, verá Petrov y Sidorov en los números 2 y 3. Entonces, son estos dos vecinos quienes utilizan el número de teléfono 567575677.

Revise las tres tablas y asegúrese de comprender qué números de teléfono pertenecen a qué residentes y viceversa. Si ve esta conexión, comprenderá que es tan simple como tres centavos y puede implementarla rápidamente en sus proyectos.

CREATE TABLE Nombres (idName identificador único DEFAULT NEWID(), vcName varchar(50), CONSTRAINT PK_guid PRIMARY KEY (idName)) CREATE TABLE Teléfonos (idPhone identificador único DEFAULT NEWID(), vcPhone varchar(10), CONSTRAINT PK_idPhone PRIMARY KEY (idPhone)) CREATE TABLE LinkTable (identificador único de idLinkTable DEFAULT NEWID(), identificador único de idName, identificador único de idPhone, RESTRICCIÓN PK_idLinkTable CLAVE PRIMARIA (idLinkTable), RESTRICCIÓN FK_idPhone CLAVE EXTRANJERA (idPhone) REFERENCIAS Teléfonos (idPhone), RESTRICCIÓN FK_idName CLAVE EXTRANJERA (idName) REFERENCIAS Nombres (idName) )

La tabla de unión tiene dos claves externas que se vinculan con las tablas de nombres y teléfonos, y una clave principal que hace que los registros sean únicos.

Elegí el campo GUID como clave principal porque es más conveniente para resolver esta tarea en particular. El asunto es que necesitamos interponer registros en dos tablas y en ambos casos es necesario especificar la misma clave. El valor GUID se puede generar y luego usar al insertar datos en ambas tablas.

También puede usar un campo de incremento automático como clave, pero en este caso el problema es un poco más difícil de resolver, más precisamente, es un inconveniente para resolver el problema. Por ejemplo, al agregar un número de teléfono, primero debe insertar la fila correspondiente en la tabla, luego buscarla, determinar la clave que se asignó a la fila y luego establecer una conexión.

En esta etapa, estamos limitados a crear tablas únicamente, y en la sección 2.8 volveremos a este tema y aprenderemos a trabajar con tablas relacionadas. Trabajar con relaciones de uno a uno y de uno a muchos no es muy diferente, porque solo dos tablas están involucradas en este esquema. La relación de muchos a muchos es un poco más complicada debido a la tabla de unión, por lo que la cubriremos por separado en la Sección 2.27.

La figura muestra una tabla (proporción de grado 5) que contiene información sobre los empleados de una empresa hipotética. Las filas de la tabla corresponden a tuplas. Cada línea es en realidad una descripción de un objeto del mundo real (en este caso, un empleado), cuyas características están contenidas en las columnas. Las relaciones relacionales corresponden a conjuntos de entidades, mientras que las tuplas corresponden a entidades. Las columnas de una tabla que representan una relación relacional se denominan atributos.

Cada atributo se define en un dominio, por lo que se puede pensar en el dominio como el conjunto de valores válidos para ese atributo. Varios atributos de la misma relación, e incluso atributos de diferentes relaciones, se pueden definir en el mismo dominio.

Un atributo cuyo valor identifica de forma única las tuplas se denomina llave (o simplemente llave). La clave es el atributo "Número de personal", ya que su valor es único para cada empleado de la empresa. Si las tuplas se identifican solo concatenando los valores de varios atributos, entonces se dice que la relación tiene una clave compuesta.

Clave primaria- en un modelo de datos relacional, una de las claves potenciales de la relación, elegida como clave principal (o clave por defecto).

Una relación puede contener varias claves. Siempre se declara una de las claves. primario, sus valores no se pueden actualizar. Todas las demás claves de relación se llaman claves posibles.

Desde el punto de vista de la teoría, todas las claves potenciales (posibles) de la relación son equivalentes, es decir, tienen las mismas propiedades de unicidad y minimalidad. Sin embargo, como principal, se suele elegir una de las claves potenciales, que es la más conveniente para ciertos fines prácticos, por ejemplo, para crear externo claves de otras maneras, o para crear un índice agrupado. Por lo tanto, por regla general, se elige como clave principal la que tiene el tamaño más pequeño ( almacenamiento físico) y/o incluye el menor número de atributos.

Si Clave primaria consta de un solo atributo, se llama llave sencilla.

Si Clave primaria consta de dos o más atributos, se llama clave compuesta. Por lo tanto, el nombre, el apellido, el patronímico, el número de pasaporte y la serie de pasaporte no pueden ser claves primarias por separado, ya que pueden ser las mismas para dos o más personas. Pero no existen dos documentos personales del mismo tipo con la misma serie y número. Por tanto, en una relación que contiene datos sobre personas, la clave primaria puede ser un subconjunto de atributos, formado por el tipo de documento personal, su serie y número.



A diferencia de los modelos de datos jerárquicos y de red, el relacional no tiene el concepto de relación de grupo. Para reflejar asociaciones entre tuplas de diferentes relaciones se utiliza la duplicación de sus claves.

Los atributos que son copias de las claves de otras relaciones se denominan llaves extranjeras.

Por ejemplo, la relación entre DEPARTAMENTO y EMPLEADO se crea copiando la clave principal "Departamento_Número" de la primera relación a la segunda. Por lo tanto, para obtener una lista de empleados de una subdivisión dada, es necesario: 1) Desde la tabla DEPARTAMENTO, configure el valor del atributo "Departamento_Número" El correspondiente al "Department_Name" dado. 2) seleccione todos los registros de la tabla EMPLEADO, valor del atributo "Departamento_Número" que es igual a la obtenida en el paso anterior. Para saber en qué departamento trabaja un empleado, debe realizar la operación inversa: 1) Determinar "Departamento_Número" de la tabla EMPLEADO. 2) En base al valor obtenido, encontramos una entrada en la tabla DEPARTAMENTO.


18. Normalización en bases de datos relacionales, el concepto de forma normal en el diseño de bases de datos.

forma normal - una propiedad de una relación en un modelo de datos relacionales que lo caracteriza en términos de redundancia, lo que puede conducir potencialmente a resultados lógicamente erróneos de muestreo o cambio de datos. La forma normal se define como el conjunto de requisitos que debe satisfacer una relación.

El proceso de convertir una base de datos a un formato de formulario normal se denomina normalización . La normalización tiene como objetivo llevar la estructura de la base de datos a una forma que proporcione una redundancia mínima, es decir, la normalización no tiene como objetivo reducir o aumentar el rendimiento, ni reducir o aumentar el tamaño de la base de datos. El objetivo final de la normalización es reducir la inconsistencia potencial de la información almacenada en la base de datos.



La redundancia generalmente se elimina al descomponer las relaciones de tal manera que solo se almacenan hechos primarios en cada relación (es decir, hechos que no se derivan de otros hechos almacenados).

dependencias funcionales.

Una base de datos relacional contiene información tanto estructural como semántica. La estructura de una base de datos está determinada por el número y tipo de relaciones incluidas en ella, y las relaciones de uno a muchos que existen entre las tuplas de esas relaciones. La parte semántica describe el conjunto de dependencias funcionales que existen entre los atributos de estas relaciones. Demos una definición de dependencia funcional.

19. 1NF: Definiciones básicas y reglas de transformación.

Para discutir la primera forma normal, se deben dar dos definiciones:

atributo simple - un atributo cuyos valores son atómicos (indivisibles).

Atributo complejo - se obtiene combinando varios atributos atómicos que se pueden definir en el mismo o diferentes dominios (también se le llama vector o agregado de datos).

Definición de primera forma normal:

una relación está en 1NF si los valores de todos sus atributos son atómicos. . De lo contrario, no es una tabla en absoluto y dichos atributos deben descomponerse.

Considere un ejemplo:

La base de datos de recursos humanos de la empresa necesita almacenar información sobre los empleados que puede tratar de representar en relación con

EMPLEADO(NÚMERO_EMPLEADO, NOMBRE, FECHA_NACIMIENTO, HISTORIAL_TRABAJO, HIJOS).

De un examen cuidadoso de esta relación, se sigue que los atributos "historial de trabajo" Y "niños" son complejos, además, el atributo "historial de trabajo" incluye otro atributo complejo "historia_salario".
Estas unidades se ven así:

 HISTORIAL_TRABAJO (FECHA_RECEPCIÓN, NOMBRE, HISTORIA_SALARIO),

 HISTORIAL_SALARIO (FECHA_CITA, SALARIO),

 HIJOS (NIÑO_NOMBRE, NACIMIENTO_AÑO).

Su relación se muestra en la Fig. 3.3.

Figura 3.3. Relación inicial.

Para llevar la relación original EMPLEADO a la primera forma normal, es necesario descomponerla en cuatro relaciones, como se muestra en la siguiente figura:

Figura 3.4. Conjunto normalizado de relaciones.

Aquí, la clave principal de cada relación está resaltada en azul y los nombres de las claves externas están en azul. Recuérdese que son las claves foráneas las que sirven para representar las dependencias funcionales que existen en la relación original. Estas dependencias funcionales se indican mediante líneas con flechas.

El algoritmo de normalización es descrito por EF Codd de la siguiente manera:

  • Comenzando con la relación en la parte superior del árbol (Figura 3.3), se toma su clave primaria y cada relación inmediatamente subordinada se expande insertando el dominio o combinación de dominios de esa clave primaria.
  • La clave principal de cada relación así ampliada consta de la clave principal que tenía la relación antes de la expansión y la clave principal añadida de la relación principal.
  • Después de eso, todos los dominios no simples se eliminan de la relación principal, se elimina el nodo superior del árbol y se repite el mismo procedimiento para cada uno de los subárboles restantes.

20. 2NF: Definiciones básicas y reglas de transformación.

Muy a menudo, la clave principal de una relación incluye varios atributos (en cuyo caso se denomina compuesto) - ver, por ejemplo, la relación NIÑOS mostrada en la fig. 3.4 pregunta 19. Esto introduce el concepto dependencia funcional total.

Definición:

Un atributo que no es clave depende funcionalmente de una clave compuesta si depende funcionalmente de la clave en su conjunto, pero no depende funcionalmente de ninguno de sus atributos constituyentes.

Ejemplo:

Sea una relación OFERTA (N_PROVEEDOR, PRODUCTO, PRECIO).
Un proveedor puede suministrar diferentes bienes y los mismos bienes pueden ser suministrados por diferentes proveedores. Entonces la clave de la relación es "N_proveedor + artículo". Que todos los proveedores suministren bienes al mismo precio. Entonces tenemos las siguientes dependencias funcionales:

  • N_proveedor, artículo -> precio
  • producto -> precio

La dependencia funcional incompleta del atributo "precio" en la clave conduce a la siguiente anomalía: cuando cambia el precio de un producto, se requiere una vista completa de la relación para cambiar todos los registros sobre sus proveedores. Esta anomalía es consecuencia del hecho de que dos hechos semánticos se combinan en una estructura de datos. La siguiente expansión da la relación en 2FN:

  • ENTREGA (N_PROVEEDOR, PRODUCTO)
  • PRECIO_PRODUCTO (PRODUCTO, PRECIO)

Así, uno puede dar

Definición de segunda forma normal: Una relación está en 2NF si está en 1NF y cada atributo que no es clave depende funcionalmente de la clave.

21. 3NF: Definiciones básicas y reglas de transformación.

Antes de discutir la tercera forma normal, es necesario introducir el concepto: dependencia funcional transitiva.

Definición:

Sean X, Y, Z tres atributos de alguna relación. En este caso, X --> Y e Y --> Z, pero no hay correspondencia inversa, es decir Z -/-> Y e Y -/-> X. Entonces Z depende transitivamente de X.
Sea una relación ALMACENAMIENTO ( FIRME, ALMACÉN, VOLUMEN), que contiene información sobre las empresas que reciben mercancías de los almacenes y los volúmenes de estos almacenes. Atributo clave - "firme". Si cada empresa puede recibir mercancías de un solo almacén, a este respecto existen las siguientes dependencias funcionales:

  • firme -> existencias
  • existencias -> volumen

Esto crea anomalías:

  • si en este momento ninguna empresa recibe mercancías del almacén, entonces los datos sobre su volumen no se pueden ingresar en la base de datos (porque el atributo clave no está definido)
  • si el volumen del almacén cambia, es necesario visualizar toda la relación y cambiar las fichas de todas las empresas asociadas a este almacén.

Para eliminar estas anomalías, es necesario descomponer la relación original en dos:

  • ALMACENAMIENTO ( FIRME, EXISTENCIAS)
  • VOLUMEN_EXISTENCIAS ( EXISTENCIAS, VOLUMEN)

Definición de tercera forma normal:

Una relación está en 3NF si está en 2FN y cada atributo que no es clave no depende transitivamente de la clave principal.

Anteriormente en este libro, señalamos ciertas relaciones que existen entre ciertos campos de tablas de muestra. El campo snum en la tabla Clientes, por ejemplo, corresponde al campo snum en la tabla Vendedores y la tabla Pedidos. El campo cnum de la tabla Clientes también corresponde al campo cnum de la tabla Pedidos. A este tipo de relación la hemos llamado integridad referencial; y durante la discusión, vio cómo se puede utilizar.

En este capítulo, explorará la integridad referencial con más detalle y conocerá todas las limitaciones que puede utilizar para respaldarla. También verá cómo se aplica esta limitación cuando utiliza comandos de modificación DML. Debido a que la integridad referencial implica vincular campos o grupos de campos, a menudo entre tablas, esta acción puede ser algo más compleja que otras restricciones. Por esta razón, es bueno estar completamente familiarizado con él, incluso si no planea crear tablas. Sus comandos de modificación se pueden hacer más eficientes con una restricción de integridad referencial (al igual que con otras restricciones, pero una restricción de integridad referencial puede afectar tablas distintas de aquellas en las que está definida), y ciertas funciones de consulta, como las uniones, se estructuran repetidamente en términos de relaciones de integridad referencial (como se destaca en el Capítulo 8).

CLAVE EXTRANJERA Y CLAVE PADRE

Cuando todos los valores de un campo de una tabla están representados en un campo de otra tabla, decimos que el primer campo hace referencia al segundo. Esto indica una relación directa entre los valores de los dos campos. Por ejemplo, cada uno de los clientes de la tabla Clientes tiene un campo snum que apunta al vendedor asignado en la tabla Vendedores. Para cada pedido en la tabla Pedidos, hay uno y solo este vendedor y uno y solo este cliente. Esto se muestra utilizando los campos snum y cnum en la tabla Pedidos.

Cuando un campo de una tabla hace referencia a otro, se denomina clave externa; y el campo al que se refiere se llama clave principal. Entonces, el campo snum en la tabla Clientes es la clave externa, y el campo snum al que se refiere en la tabla Vendedores es la clave principal.

Asimismo, los campos cnum y snum de la tabla Pedidos son claves externas que hacen referencia a sus claves principales nombradas en la tabla Clientes y la tabla Vendedores. Los nombres de la clave externa y la clave principal no tienen que ser iguales, es solo una convención que seguimos para que la combinación sea más comprensible.

LLAVES EXTRANJERAS MULTICOLUMN

De hecho, una clave externa no consta necesariamente de un solo campo. Al igual que una clave principal, una clave externa puede tener cualquier cantidad de campos, todos los cuales se tratan como una sola unidad. La clave foránea y la clave principal a la que se refiere deben, por supuesto, tener el mismo número y tipo de campo, y estar en el mismo orden. Las claves foráneas que consisten en un campo, las que usamos exclusivamente en nuestras tablas de muestra, son las más comunes. Para mantener nuestra discusión simple, a menudo nos referiremos a una clave externa como una sola columna. Esto no es una coincidencia. Si esto no se marca, cualquiera dirá de un campo que es una clave externa que también se aplica a un grupo de campos que es una clave externa.

SIGNIFICADO DE LAS CLAVES EXTRANJERAS Y PADRES

Cuando un campo es una clave foránea, está relacionado de alguna manera con la tabla a la que se refiere. Lo que está diciendo es que "cada valor en este campo (clave externa) está directamente vinculado a un valor en otro campo (clave principal)". Cada valor (cada fila) de la clave externa debe referirse sin ambigüedades a uno y solo ese valor (fila) de la clave principal. Si es así, entonces, de hecho, su sistema, como dicen, estará en un estado de integridad referencial. Puedes ver esto en un ejemplo. La clave externa snum en la tabla Clientes es 1001 para las filas de Hoffman y Clemens. Supongamos que tuviéramos dos filas en la tabla Vendedores con un valor en el campo snum = 1001. ¿Cómo sabemos a cuál de los dos vendedores se asignó Hoffman y Clemens? Del mismo modo, si no hay tales filas en la tabla de proveedores, terminaremos con Hoffman y Clemens asignados a un proveedor que no existe.

Está claro que cada valor de la clave foránea debe representarse una vez, y sólo una vez, en la clave padre.

De hecho, un valor de clave foránea dado puede referirse a un solo valor de clave principal sin asumir que es posible lo contrario: es decir, cualquier número de claves foráneas puede referirse a un solo valor de clave principal. Puede ver esto en las tablas de muestra de nuestros ejemplos. Tanto Hoffman como Clemens están asignados a Peel, por lo que sus valores de clave externa coinciden con la misma clave principal, lo cual es excelente. Un valor de clave externa debe hacer referencia a un solo valor de clave principal, pero un valor de clave principal puede hacer referencia a cualquier cantidad de valores de clave externa. Como ilustración, los valores de clave externa de la tabla Clientes que coincidieron con su clave principal en la tabla Vendedores se muestran en la Figura 19.1. Por conveniencia, no tomamos en cuenta el género no relacionado con este ejemplo.

RESTRICCIONES CLAVE EXTRANJERAS

SQL admite la integridad referencial con una restricción FOREIGN KEY. Aunque la restricción FOREIGN KEY es una característica nueva en SQL, aún no proporciona generalidad. Además, algunas de sus implementaciones son más complejas que otras. Esta función debería restringir los valores que puede ingresar en su base de datos para obligar a la clave externa y la clave principal a seguir el principio de integridad referencial. Una de las acciones de una restricción de clave externa es descartar valores para campos restringidos como una clave externa que aún no está presente en la clave principal. Esta restricción también afecta su capacidad para cambiar o eliminar valores clave principales (lo discutiremos más adelante en este capítulo).

CÓMO SE PUEDEN REPRESENTAR LOS CAMPOS COMO CLAVES EXTRANJERAS

Utiliza una restricción FOREIGN KEY en una instrucción CREATE TABLE (o ALTER TABLE) que contiene un campo que desea declarar como clave externa. Les da una clave principal a la que se referirá dentro de la restricción FOREIGN KEY. Poner esta restricción en el comando es lo mismo que para las otras restricciones discutidas en el capítulo anterior. Figura 19.1: Clave foránea de la tabla Cliente con clave padre

Como la mayoría de las restricciones, puede ser una restricción de tabla o columna, en forma de tabla que permite usar varios campos como una única clave externa.

CLAVE EXTRANJERA COMO LÍMITE DE MESA

Sintaxis de restricción de la tabla FOREIGN KEY: FOREIGN KEY REFERENCIAS [ ] La lista de la primera columna es una lista separada por comas de una o más columnas de la tabla que se crearán o modificarán con este comando. Pktable es una tabla que contiene una clave principal. Puede ser una tabla creada o modificada por el comando actual. La segunda lista de columnas es la lista de columnas que formarán la clave principal. Las listas de las dos columnas deben ser compatibles, es decir:

* Deben tener el mismo número de columnas.

* En esta secuencia, la primera, segunda, tercera, etc. columnas de la lista de columnas de clave foránea deben tener los mismos tipos y tamaños de datos que la primera, segunda, tercera, etc. columnas de la lista de columnas de la clave principal. Las columnas de las listas de ambas columnas no deben tener el mismo nombre, aunque hemos utilizado este método en nuestros ejemplos para que la relación sea más clara.

Vamos a crear una tabla Clientes con el campo snum definido como una clave foránea que hace referencia a la tabla Vendedores: CREAR TABLA Clientes (cnum integer NOT NULL PRIMARY KEY cname char(10), city char(10), snum integer, FOREIGN KEY (snum) REFERENCIAS Vendedores (snum); tenga en cuenta que al usar ALTER TABLE en lugar de CREATE TABLE, para aplicar una restricción FOREIGN KEY, los valores que especifique en la clave externa y la clave principal deben estar en un estado de integridad referencial. De lo contrario, el comando será rechazado.Aunque ALTER TABLE es muy útil desde, por su conveniencia, primero deberá formar principios estructurales en su sistema, siempre que sea posible, como la integridad referencial.

CLAVE EXTRANJERA COMO LÍMITE DE COLUMNA

La opción de restringir una columna con una restricción FOREIGN KEY, también llamada, una restricción referencial (REFERENCIAS), ya que en realidad no contiene las palabras FOREIGN KEY, sino que simplemente usa la palabra REFERENCIAS, y luego la clave principal, así: CREAR TABLE Customers (cnum integer NOT NULL PRIMARY KEY, cname char(10), city char(10), snum integer REFERENCIAS Vendedores (snum)); Lo anterior define Customers.snum como una clave externa cuya clave principal es Salespeople.snum. Esto es equivalente a esta restricción de tabla: FOREIGN KEY (snum) REGERENCES Vendedores (snum)

NO LISTE LA COLUMNA DE CLAVE PRINCIPAL

Al usar una restricción FOREIGN KEY en una tabla o columna, puede optar por no mostrar las columnas de la clave principal si la clave principal tiene una restricción PRIMARY KEY. Naturalmente, en el caso de claves con muchos campos, el orden de las columnas en las claves primaria y foránea debe coincidir y, en cualquier caso, se mantiene el principio de compatibilidad entre dos claves. Por ejemplo, si colocamos una restricción PRIMARY KEY en el campo snum de la tabla Salespersons, podríamos usarla como clave externa en la tabla Customers (similar al ejemplo anterior) en este comando: CREATE TABLE Customers (cnum integer NOT NULL CLAVE PRINCIPAL, cname char(10), city char(10), snum integer REFERENCIAS Vendedores); Esta función se incorporó al lenguaje para alentarlo a usar claves primarias como claves principales.

CÓMO LA INTEGRIDAD DE LA REFERENCIA RESTRINGE LOS VALORES CLAVE PRINCIPALES

Mantener la integridad referencial requiere algunas restricciones en los valores que se pueden representar en los campos declarados como clave externa y clave principal. La clave principal debe estar estructurada para garantizar que cada valor de clave externa coincida con una fila específica. Esto significa que (la clave) debe ser única y no contener ningún valor nulo. Esto no es suficiente para una clave principal si se cumple un requisito como cuando se declara una clave externa. SQL debe estar seguro de que los valores dobles o valores vacíos(NULL) no se ingresaron en la clave principal. Por lo tanto, debe asegurarse de que todos los géneros que se utilizan como claves principales tengan una restricción CLAVE PRIMARIA o una restricción ÚNICA, como una restricción NO NULO.

CLAVE PRIMARIA COMO CLAVE EXTRANJERA ÚNICA

Hacer referencia a sus claves foráneas solo a claves primarias, como hicimos en las tablas genéricas, es una buena estrategia. Cuando usa claves foráneas, no solo las asocia con las claves principales a las que se refieren; los asocia con una fila de tabla específica donde se encontrará esa clave principal. Por sí misma, la clave principal no proporciona ninguna información que no esté ya presente en la clave externa. El significado, por ejemplo, del campo snum como clave externa en la tabla Clientes es la relación que proporciona, no con el valor del campo snum al que se refiere, sino con otra información en la tabla Vendedores, como los nombres de los vendedores, sus ubicaciones, etc. Una clave externa no es solo una relación entre dos valores idénticos; es una relación, utilizando estos dos valores, entre dos filas de la tabla especificada en la consulta. Este campo snum se puede usar para asociar cualquier información en una fila de la tabla Clientes con una fila de referencia de la tabla Vendedores, por ejemplo, para averiguar si viven en la misma ciudad, quién tiene un nombre más largo, si el vendedor tiene cualquier otro cliente además de este cliente clientes, y así sucesivamente. Dado que el propósito de una clave principal es identificar la unicidad de una fila, esta es la opción más lógica y menos ambigua para una clave externa. Para cualquier clave externa que use una clave única como clave principal, debe crear una clave externa que use la clave principal de la misma tabla para la misma acción. Una clave externa, que no tiene otro propósito que el de asociar filas, se asemeja a una clave principal que se usa únicamente para identificar filas y es una buena manera de mantener la estructura de su base de datos clara y simple, y por lo tanto menos compleja.

RESTRICCIONES CLAVE EXTRANJERAS

Una clave externa, en particular, puede contener solo aquellos valores que están realmente representados en la clave principal o vacíos (NULL). Un intento de ingresar otros valores en esta clave será rechazado. Puede declarar que una clave externa NO sea NULL, pero esto es opcional y, en la mayoría de los casos, no es deseable. Por ejemplo, suponga que ingresa un cliente sin saber de antemano a qué vendedor se le asignará. La mejor salida en esta situación es utilizar un valor NOT NULL, que debe cambiarse posteriormente a un valor específico.

QUÉ SUCEDE SI EJECUTAS EL COMANDO DE MODIFICACIÓN

Supongamos que todas las claves foráneas creadas en nuestras tablas de ejemplo se declaran y aplican con restricciones de clave foránea, de la siguiente manera: CREATE TABLE Salespeople (snum integer NOT NULL PRIMARY KEY, sname char(10) NOT NULL, city char(10) , comm decimal ); CREATE TABLE Customers (cnum integer NOT NULL PRIMARY KEY, cname char(10) NOT NULL, city char(10), rating integer, snum integer, FOREIGN KEY (snum) REFERENCIAS Vendedores, ÚNICOS (cnum, snum) ; CREATE TABLE Pedidos ( cnum entero NO NULO CLAVE PRINCIPAL, amt decimal, odate fecha NO NULO, cnum entero NO NULO snum entero NO NULO CLAVE EXTRANJERA (cnum, snum) REFERENCIAS CLIENTES (cnum, snum);

INCLUYENDO DESCRIPCIONES DE TABLA

Hay varios atributos de tales definiciones que necesitan ser discutidos. La razón por la que decidimos hacer que los campos cnum y snum en la tabla Pedidos sean una sola clave externa es para garantizar que para cada cliente contenido en los pedidos, el comerciante que acredite ese pedido sea el mismo que figura en la tabla Clientes. Para crear una clave externa de este tipo, tendríamos que colocar una restricción de tabla ÚNICA en dos campos de la tabla Clientes, incluso si no se requiere para esa tabla en sí. Siempre que el campo cnum en esta tabla tenga una restricción PRIMARY KEY, será único en cualquier caso y, por lo tanto, no es posible obtener otra combinación del campo cnum con algún otro campo. La creación de una clave externa de esta manera mantiene la integridad de la base de datos, incluso si al hacerlo evitará que la manipule internamente y acredite a cualquier proveedor que no sea el asignado a ese cliente en particular.

Desde el punto de vista de la integridad de la base de datos, las interrupciones internas (o excepciones) son, por supuesto, indeseables. Si los permite y al mismo tiempo desea mantener la integridad de su base de datos, puede declarar los campos snum y cnum en la tabla Pedidos como claves externas independientes de esos campos en la tabla Ventas y la tabla Cliente, respectivamente. De hecho, usar el campo snum en la tabla Pedidos, como lo hicimos nosotros, es opcional, aunque fue útil hacerlo para variar. El campo cnum que vincula cada pedido de clientes en la tabla Clientes, en la tabla Pedidos y en la tabla Clientes, siempre debe compartirse para encontrar el campo snum correcto para ese pedido (sin permitir excepciones). Esto significa que escribimos una parte de la información, qué cliente está asignado a qué proveedor, dos veces, y será necesario hacer más trabajo para asegurarnos de que ambas versiones sean consistentes. Si no tenemos una restricción de clave externa como se mencionó anteriormente, esta situación será especialmente problemática porque cada pedido deberá verificarse manualmente (junto con la consulta) para asegurarse de que el vendedor correcto acreditó cada venta respectiva. Tener este tipo de redundancia de información en su base de datos se denomina desnormalización, lo cual no es deseable en una base de datos relacional ideal, aunque en la práctica se puede permitir. La desmoralización puede hacer que algunas consultas se ejecuten más rápido, ya que una consulta en una sola tabla siempre es significativamente más rápida que una consulta en una unión.

APLICACIÓN DE RESTRICCIONES

¿Cómo afectan tales restricciones a su capacidad e incapacidad para usar los comandos de modificación de DML? Para los campos definidos como claves externas, la respuesta es bastante simple: cualquier valor que ingrese en ese campo con un comando INSERTAR o ACTUALIZAR ya debe estar presente en sus claves principales. Puede poner valores NULL en este campo, aunque los valores NULL no están permitidos en las claves principales si tienen una restricción NOT NULL. Puede ELIMINAR cualquier fila con claves externas sin usar claves principales.

Dado que la cuestión de cambiar los valores de la clave principal está involucrada, la respuesta, según la definición ANSI, es aún más simple, pero quizás un poco más limitada: cualquier valor de una clave principal al que hace referencia un valor de clave externa no se puede eliminar ni cambiar. Esto significa, por ejemplo, que no puede eliminar un cliente de la tabla Clientes mientras todavía tenga pedidos en la tabla Pedidos. Dependiendo de cómo use estas tablas, esto puede ser deseable o problemático. Sin embargo, esto es ciertamente mejor que tener un sistema que le permita eliminar un cliente con pedidos actuales y dejar la tabla Pedidos que se refiere a clientes inexistentes. El objetivo de este sistema de restricciones es que el creador de la tabla Pedidos, utilizando la tabla Clientes y la tabla Vendedores como claves principales, puede imponer restricciones significativas a las acciones en estas tablas. Por esta razón, no podrá usar una tabla que no controle (es decir, no la creó y no es su propietario) a menos que el propietario (creador) de esa tabla le otorgue específicamente el derecho a hacerlo (como se explica en el Capítulo 22). Hay algunos otros acciones posibles Cambios en la clave principal que no forman parte de ANSI pero que se pueden encontrar en algunos programas comerciales. Si desea cambiar o eliminar el valor de referencia de la clave principal actual, existen básicamente tres posibilidades:

  • Puede restringir o evitar el cambio (al modo ANSI) indicando que los cambios en la clave principal están restringidos.
  • Puede realizar un cambio en la clave principal y, por lo tanto, realizar cambios automáticos en la clave externa, lo que se denomina cambio en cascada.
  • Puede realizar un cambio en la clave principal y establecer la clave externa en NULL automáticamente (suponiendo que NULL esté permitido en la clave externa), lo que se denomina cambio de clave externa vacía.

    Incluso dentro de estas tres categorías, es posible que no desee procesar todos los comandos de modificación de esta forma. INSERT, por supuesto, es irrelevante. Pone los nuevos valores de la clave principal en la tabla para que ninguno de esos valores se pueda llamar en este momento. Sin embargo, es posible que desee permitir modificaciones en cascada sin eliminaciones, y viceversa. La mejor situación puede ser que le permita definir cualquiera de las tres categorías, independientemente de los comandos ACTUALIZAR y ELIMINAR. Por lo tanto, nos referiremos a los efectos de actualización y los efectos de eliminación, que determinan lo que sucede si ejecuta un comando ACTUALIZAR o ELIMINAR en la clave principal. Estos efectos de los que hablamos se llaman cambios RESTRINGIDOS, cambios en CASCADAS y cambios NULOS. Las capacidades reales de su sistema deben estar dentro del estricto estándar ANSI (efectos de modificación y eliminación, ambos limitados automáticamente) para la situación más ideal descrita anteriormente. A modo de ilustración, le mostraremos algunos ejemplos de lo que puede hacer con la gama completa de efectos de modificación y eliminación. Por supuesto, los efectos de modificación y eliminación, que son características no estándar, carecen de la sintaxis de estado estándar. La sintaxis que usamos aquí es simple de escribir y servirá para ilustrar la función de estos efectos.

    Para completar el experimento, supongamos que tiene una razón para cambiar el campo snum de la tabla Vendedor en caso de que nuestra tabla Vendedor cambie de particiones. (Por lo general, cambiar las claves principales no es algo que recomendamos hacer en la práctica. Es solo otra razón por la que las claves principales existentes no hacen nada más que actuar como claves principales: no deberían cambiar). Cuando cambia el número de proveedor, desea mantener todos de sus clientes Sin embargo, si este vendedor deja su firma o empresa, es posible que no desee eliminar a sus clientes cuando lo elimine de la base de datos. En su lugar, querrá asegurarse de que los clientes estén asignados a otra persona. Para hacer esto, debe especificar ACTUALIZAR con un efecto Cascada y ELIMINAR con un efecto Limitado. CREAR TABLA Clientes (cnum integer NOT NULL PRIMARY KEY, cname char(10) NOT NULL, city char(10), rating integer, snum integer REFERENCIAS Vendedores, ACTUALIZACIÓN DE Vendedores EN CASCADAS, ELIMINACIÓN DE Vendedores RESTRINGIDOS); Si ahora intenta eliminar Peel de la tabla Proveedores, el comando no será válido hasta que cambie el valor de género snum de los clientes Hoffman y Clemens a otro proveedor asignado. Por otro lado, puede cambiar el campo snum de Peel a 1009, y Hoffman y Clemens también se cambiarán automáticamente.

    El tercer efecto son los cambios NULL. Sucede que cuando los vendedores abandonan la empresa, sus pedidos actuales no se transfieren a otro vendedor. Por otro lado, desea cancelar automáticamente todos los pedidos de los clientes cuyas cuentas elimine. Al cambiar los números del vendedor o cliente, simplemente puede transferirlos a él. El siguiente ejemplo muestra cómo puede crear una tabla de pedidos usando estos efectos. CREATE TABLE Orders (onum entero NOT NULL PRIMARY KEY, amt decimal, odate date NOT NULL cnum integer NOT NULL REFERENCIAS Clientes snum entero REFERENCIAS Vendedores, ACTUALIZACIÓN DE CASCADAS de Clientes, ELIMINACIÓN DE CASCADAS de Clientes, ACTUALIZACIÓN DE CASCADAS de Vendedores, ELIMINACIÓN DE NULOS de Vendedores); Por supuesto, en un comando DELETE con un efecto de cambio NULL en la tabla Vendedores, la restricción NOT NULL debe eliminarse del campo snum.

    CLAVES EXTRANJERAS QUE SON REMITIDAS A SUS SUB-TABLAS

    Como se mencionó anteriormente, una restricción FOREIGN KEY puede presentarlos en esta tabla privada como la clave principal de la tabla. Lejos de ser simple, esta función puede resultar útil. Supongamos que tenemos una tabla de empleados con un campo de administrador. Este campo contiene los números de cada uno de los empleados, algunos de los cuales también son administradores. Pero como todo administrador es al mismo tiempo un empleado, naturalmente también estará representado en esta tabla. Vamos a crear una tabla donde el número de empleado (la columna llamada empno) se declara como clave principal y el administrador como clave externa se referirá a ella: CREAR TABLA Empleados (empno entero NOT NULL PRIMARY KEY, name char(10) NOT NULL UNIOUE , administrador entero REFERENCIAS Empleados); (Debido a que la clave externa es la clave primaria a la que se hace referencia en la tabla, la lista de columnas se puede excluir). Esta tabla tiene el contenido: EMPNO NAME MANAGER _____ ________ _______ 1003 Terrence 2007 2007 Atali NULL 1688 McKenna 1003 2002 Collier 2007 Como puede ver, cada de ellos (pero no Atali) se refiere a otro empleado de la tabla como su administrador. El atali que tiene el número más alto en la tabla debe tener su valor establecido en NULL. Esto da otro principio de integridad referencial. Una clave externa que haga referencia a una tabla privada debe permitir valores = NULL. Si no es así, ¿cómo podría insertar la primera fila? Incluso si esta primera fila se refiere a sí misma, el valor de la clave principal ya debe establecerse cuando se ingresa el valor de la clave externa. Este principio será cierto incluso si la clave foránea no hace referencia directamente a la tabla privada, sino que hace referencia a otra tabla, que luego hace referencia a la tabla de clave foránea. Por ejemplo, supongamos que nuestra tabla Vendedores tiene un campo adicional que hace referencia a la tabla Clientes, de modo que cada tabla hace referencia a la otra, como se muestra en la siguiente sentencia CREATE TABLE: CREATE TABLE Vendedores (snum integer NOT NULL PRIMARY KEY, sname char(10) NOT NULL, city char(10), comm declmal, cnum entero REFERENCIAS Clientes); CREAR TABLA Clientes (cnum integer NOT NULL PRIMARY KEY, cname char(10) NOT NULL, city char(10), rating integer, snum integer REFERENCIAS Vendedores); Esto se llama una referencia cruzada. SQL admite esto en teoría, pero en la práctica puede ser un problema. La tabla que se crea primero de las dos es una tabla de referencia que aún no existe para la otra. Con el fin de proporcionar una referencia cruzada, SQL lo permite, pero ninguna de las tablas se podrá utilizar mientras ambas estén en proceso de creación. Por otro lado, si las dos tablas son creadas por diferentes usuarios, el problema se vuelve aún más difícil. La referencia cruzada puede ser una herramienta útil, pero no está exenta de ambigüedad y peligros. El ejemplo anterior, por ejemplo, no es del todo utilizable: porque limita al vendedor a un solo cliente, y además, no es necesario utilizar una referencia cruzada para lograrlo. Le recomendamos que tenga cuidado al usarlo y analice cómo sus programas manejan los efectos de modificación y eliminación, así como los procesos de procesamiento de privilegios y diálogos antes de crear un sistema de integridad de referencias cruzadas. (Los privilegios y el manejo de solicitudes conversacionales se analizarán en los Capítulos 22 y , respectivamente).

    RESUMEN

    Ahora tiene una gestión de integridad de referencia bastante buena. La idea básica es que todos los valores de clave externa se refieran a la fila especificada de la clave principal. Esto significa que cada valor de clave externa debe representarse una vez, y solo una vez, en la clave principal. Cada vez que se coloca un valor en una clave externa, se verifica la clave principal para asegurarse de que su valor esté representado; de lo contrario, el comando será rechazado. La clave principal debe tener una CLAVE PRINCIPAL o una restricción ÚNICA para garantizar que el valor no se represente más de una vez. Un intento de cambiar el valor de una clave principal que actualmente está representada en una clave externa será rechazado por completo. Sin embargo, su sistema puede ofrecerle la opción de obtener el valor de la clave externa establecida en NULL o de obtener el nuevo valor de la clave principal, y especificar cuál se puede recuperar de forma independiente para los comandos ACTUALIZAR y ELIMINAR. Esto concluye nuestra discusión sobre el comando CREAR TABLA. A continuación, le presentaremos otro tipo de comando: CREAR. En el Capítulo 20, aprenderá cómo representar objetos de datos que se ven y actúan como una tabla, pero que en realidad son los resultados de consultas. Las vistas también pueden realizar algunas funciones de restricción, por lo que puede evaluar mejor su necesidad de restricciones después de leer los siguientes tres capítulos.

    TRABAJANDO CON SQL

    1. Cree una tabla llamada Cityorders. Debe contener los mismos campos onum, amt y snum que la tabla Orders, y los mismos campos cnum y city que la tabla Customers, de modo que el pedido de cada cliente se ingrese en esta tabla junto con su ciudad. El campo onum será la clave principal de Cityorders. Todos los géneros en Cityorders deben tener restricciones en comparación con las tablas de Clientes y Pedidos. Se supone que las claves principales de estas tablas ya tienen las restricciones adecuadas.

    2. Compliquemos el problema. Redefina la tabla Pedidos de la siguiente manera: agregue una nueva columna llamada anterior para que se identifique para cada pedido, el campo onum del pedido anterior para este cliente actual. Haga esto usando una clave externa que se refiera a la tabla de pedidos en sí. La clave foránea también debe hacer referencia al campo cnum del cliente, que proporciona alguna relación prescrita entre el pedido actual y el de referencia.

    (Consulte el Apéndice A para obtener respuestas).

  • InterBase puede utilizar los siguientes tipos de restricciones:
    • CLAVE PRINCIPAL: la clave principal de la tabla.
    • ÚNICO: clave de tabla única.
    • CLAVE EXTERNA- clave foránea, proporciona un enlace a otra tabla y garantiza la integridad referencial entre el padre y mesas infantiles.

    Una nota sobre la terminología

    Si eres como el autor de este curso en el sentido de que te gusta buscar respuestas a una pregunta que te interesa de manera compleja, en diferentes obras de diferentes autores, entonces no podrás evitar notar cierta confusión en las definiciones. principal (maestro) -> subordinado (detalle) mesas. Recuerde que la tabla maestra a menudo se conoce como tabla principal y la tabla subordinada como tabla secundaria.

    Esto probablemente se deba a cómo se interpretan estas definiciones en el DBMS local y del servidor SQL.

    En DBMS local, la tabla principal es la que contiene los datos principales y la tabla subordinada es la adicional. Tomemos, por ejemplo, tres tablas relacionadas. El primero contiene datos de ventas, el segundo contiene datos de productos y el tercero contiene datos de clientes:


    Arroz. 18.1.

    Aquí, la información principal se almacena en la tabla de ventas, por lo tanto, es la principal (padre). La información adicional se almacena en las tablas de productos y clientes, lo que significa que son secundarios. Esto es comprensible: una hija no puede tener dos madres biológicas, pero una madre es bastante capaz de dar a luz a dos hijas.

    Pero los servidores de bases de datos SQL tienen una definición diferente de relaciones: cuando un campo en una tabla se refiere a un campo en otra tabla, se le llama clave externa. Y el campo al que se refiere se llama padre o Clave primaria. Una tabla que tiene una clave foránea (un enlace a un registro en otra tabla) a menudo se denomina tabla secundaria y una tabla con clave principal- padre. Incluso en la definición de relaciones, dicen que un padre puede tener solo un registro único, que puede ser referenciado por varios registros. mesa infantil.

    Entonces, en el ejemplo anterior, la tabla de ventas tiene dos claves externas: identificación del producto e identificación del cliente. Y ambas tablas en el lado derecho de la figura tienen clave principal"Identificador". Dado que un cliente o producto puede aparecer más de una vez en la tabla de ventas, resulta que ambas tablas del lado derecho de la figura son padres y la tabla de la izquierda es hija. Como ahora estamos estudiando InterBase-SQL servidor de base de datos, nos guiaremos por estas definiciones en lecciones posteriores. Para no confundirnos más con esta confusión, estaremos inmediatamente de acuerdo: mesa infantil tiene una clave foránea ( FOREIGN KEY ) a otra tabla.

    CLAVE PRIMARIA

    CLAVE PRIMARIA- clave primaria, es uno de los principales tipos de restricciones en la base de datos. La clave principal está destinada a identificar de forma única un registro en una tabla y debe ser única. Las claves primarias PRIMARY KEY están en las tablas que se llaman parent (Parent). No confunda la clave principal con los índices principales de las bases de datos locales, la clave principal no es un índice, sino una restricción. Al crear una clave principal interbase automáticamente crea para él índice único. Sin embargo, si creamos índice único, esto no creará restricciones de clave primaria. Una tabla solo puede tener una CLAVE PRINCIPAL.

    Supongamos que tenemos una tabla con una lista de empleados. El campo "Apellido" puede contener los mismos valores (nombres del mismo nombre), por lo que no se puede utilizar como clave principal. Rara vez, pero hay homónimos que, además, tienen los mismos nombres. Aún más raro, pero hay homónimos completos, por lo que incluso los tres campos "Apellido" + "Nombre" + "Patronímico" no pueden garantizar la unicidad del registro y no pueden ser la clave principal. En este caso, la salida, como antes, es agregar un campo - identificador, que contiene el número de serie de esta persona. Dichos campos generalmente se incrementan automáticamente (hablaremos sobre la organización de los campos de incremento automático en las próximas lecciones). Entonces,

    Clave primaria - este es uno o más campos en la tabla, cuya combinación es única para cada registro.

    Si la clave principal tiene una sola columna (como suele ser el caso), el especificador PRIMARY KEY se usa cuando definición de columna:

    CREAR TABLA Prim_1 (Stolbec1 INT NO CLAVE PRIMARIA NULA, Stolbec2 VARCHAR (50))

    Si la clave principal se basa en varias columnas, el especificador se coloca después de definir todos los campos:

    CREAR TABLA Prim_2 (Stolbec1 INT NO NULO, Stolbec2 VARCHAR (50) NO NULO, CLAVE PRINCIPAL (Stolbec1, Stolbec2))

    Como puede ver en los ejemplos, la clave principal necesariamente debe tener una restricción de columna(s) NOT NULL.

    ÚNICO

    ÚNICO- llave unica. El especificador UNIQUE especifica que todos los valores campo dado debe ser único, por lo tanto dichos campos tampoco pueden contener valores NULO. Se puede decir que la clave ÚNICA es una alternativa a la clave principal, pero existen diferencias. La principal diferencia es que debe haber una sola clave principal, mientras que puede haber varias claves únicas. Además, una restricción ÚNICA no se puede construir en el mismo conjunto de columnas que se utilizó para una restricción PRIMARY KEY u otra restricción ÚNICA. Las claves únicas, como las claves primarias, se encuentran en tablas que son padres de otras tablas.

    Una columna declarada con una restricción ÚNICA, como una clave principal, se puede usar para hacer cumplir la integridad referencial entre el padre y la mesas infantiles. Mientras que la clave foránea mesa infantil se referirá a ese(s) campo(s). Como en el caso de una clave principal, cuando se crea una clave única, automáticamente se creará una clave para ella. índice único. Pero no al revés. Un ejemplo de cómo crear una tabla con una clave primaria y dos únicas:

    CREAR TABLA Prim_3 (Stolbec1 INT NOT NULL PRIMARY KEY, Stolbec2 VARCHAR (50) NOT NULL UNIQUE, Stolbec3 FLOAT NOT NULL UNIQUE)

    CLAVE EXTERNA

    CLAVE EXTERNA- llave externa . Esta es una herramienta muy poderosa para garantizar la integridad referencial entre tablas, lo que le permite no solo monitorear la presencia de enlaces correctos, sino también administrarlos automáticamente. Las claves foráneas están contenidas en tablas que son hijos ( Child ) de otras tablas. Integridad referencial es proporcionada precisamente por una clave foránea que se refiere a la primaria o

    Si nota un error, seleccione un fragmento de texto y presione Ctrl + Enter
    COMPARTIR: