Sunteți pe pagina 1din 28

18/5/2018 https://translate.googleusercontent.

com/translate_f

Descripción general del módulo


Jueves, 21 de abril de 2016
17:49

imagen de diapositiva
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image001.png

Notas para el instructor (PPT texto)


Explique que los módulos anteriores se han incluido en las bases de datos desde una perspec va de diseño, y que
este es un módulo sobre la implementación de algunos conceptos de los anteriores.

Contenido Libro del alumno


Visión de conjunto

En el Módulo 2 de este curso, que ha aprendido acerca de las entidades y las relaciones que pueden existir entre ellos.
También vio cómo es posible modelar estas relaciones lógicamente por el uso de diagramas de entidad-relación (ERD).
En el Módulo 3, aprender acerca de la normalización de un diseño para obtener el nivel óptimo de redundancia de
datos. En este módulo, aprender a implementar las relaciones de tablas en una base de datos SQL Server®.

objetivos

Después de completar este módulo, el alumno será capaz de:

• Explicar cómo implementar varios tipos de relaciones en una base de datos SQL Server.
• Describir las consideraciones para la planificación de las bases de datos en SQL Server.

Lección 1: Introducción a las Relaciones


Jueves, 21 de abril de 2016
17:49

imagen de diapositiva

https://translate.googleusercontent.com/translate_f 1/28
18/5/2018 https://translate.googleusercontent.com/translate_f

C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image002.png

Notas para el instructor (PPT texto)


Pregunta

Usted está planeando una base de datos que realiza el seguimiento de los cursos que los estudiantes asisten a una
universidad. Cada curso puede incluir un máximo de 25 estudiantes, y los estudiantes pueden inscribirse en varios
cursos al mismo empo. Ha creado un ERD que incluye las en dades de Estudiantes y cursos. ¿Qué po de relación
existe entre estas en dades?

() Opción 1: Una relación de uno a muchos.

() Opción 2: Una relación uno-a-uno.

() Opción 3: Una relación de muchos a muchos.

() Opción 4: Una relación de po súper / sub- po.

Respondedor

(√) Opción -2: Una relación de muchos a muchos.

Contenido Libro del alumno


Resumen de la ley

Un ERD describe las entidades en una base de datos y las relaciones entre ellos. asignación de esquema es el proceso
de convertir los diseños lógicos en una implementación física mediante la creación de tablas, restricciones y otros
objetos en una base de datos. Los diferentes tipos de relaciones que se pueden implementar en una base de datos
SQL Server, y explica cómo crearlos.

OBJETIVOS

Después de completar esta, tu serás capaz de:

• Explicar la importancia de la integridad referencial.


• Describiendo cómo implementar relaciones uno a uno.
• Explicar las consideraciones para los valores NULL en las relaciones opcionales y requeridos.
• Describiendo cómo implementar relaciones de uno a muchos.
• Describiendo la forma de las relaciones muchos-a-muchos.
• Describiendo las consideraciones para los subtipos y super-tipos.
• Describir las relaciones de autorreferencia.

https://translate.googleusercontent.com/translate_f 2/28
18/5/2018 https://translate.googleusercontent.com/translate_f

Integridad referencial
Jueves, 21 de abril de 2016
17:49

imagen de diapositiva
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image003.png

Notas para el instructor (PPT texto)


No hay necesidad de entrar en detalles acerca de cómo implementar la integridad referencial en este tema. Explicar a
los estudiantes que van a aprender acerca de la u lización de la clave externa para implementar la integridad en este
módulo.

Contenido Libro del alumno


En un ERD, se especifican las relaciones que existen entre los atributos de las entidades. En una base de datos
relacionales, se implementan las entidades como tablas, cómo las columnas, y poniendo en práctica las relaciones de la
integridad referencial.

Integridad referencial
La aplicación de integridad referencial entre atributos implicados que los valores de un atributo tienen valores
correspondientes en un segundo atributo. Esto asegura que los datos son muy significativos. Por ejemplo, en una tabla
de Pedidos en una base de datos OLTP, puede haber una columna llamada ID de cliente que almacena un valor que
identifica una única ruta el cliente que se encuentra. Sin embargo, en una base de datos normalizada, la tabla de
Pedidos no contiene datos detallados del cliente; estos datos estarán en una tabla Clientes dedicados. Los valores de la
columna CustomerID de la tabla pedidos deben tener los valores correspondientes en la tabla de clientes para asegurar
que los datos tengan sentido. Cualquier fila de la tabla de pedidos con un valor CustomerID, que no existe en la tabla
Clientes, representar una orden sin un cliente coincidente. Mediante el mantenimiento de la integridad referencial,

Las claves ajenas y disparadores


Puede exigir la integridad referencial mediante el uso de claves foráneas y mediante el uso de los factores
desencadenantes. Un disparador es un objeto en una base de datos que contiene una instrucción de Transact-SQL
almacenado. La declaración en el gatillo ejecuta en respuesta a otras acciones que se producen en la base de datos;
por ejemplo, cuando un usuario actualiza los datos en una tabla. El código en el gatillo asegura que cualquier cambio
en las tablas de información guardará la integridad referencial.

Uno-a-muchos
Jueves, 21 de abril de 2016
17:49

https://translate.googleusercontent.com/translate_f 3/28
18/5/2018 https://translate.googleusercontent.com/translate_f

imagen de diapositiva
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image004.png

Notas para el instructor (PPT texto)

Contenido Libro del alumno


Por lo general, el tipo más común de relación en una base de datos relacionales es la relación de uno a muchos. En
este tipo de relación, un valor sólo puede aparecer una vez en una columna de la primera tabla, pero el mismo valor
puede aparecer muchas veces en una columna en la segunda tabla. Por lo general, las dos columnas se encuentran en
diferentes mesas, pero esto no tiene por qué ser el caso.

Uno-a-muchas relaciones se mantienen con el uso de las claves principales y claves externas. La clave principal de la
primera tabla se asegura de que todos los valores son únicos y por lo tanto, puede aparecer una vez. La clave externa
en la segunda tabla evita la adición de los valores a la columna que no tienen valores coincidentes en la columna de la
clave principal de la primera tabla.

La tabla de clientes y pedidos en el tema anterior es un ejemplo de una relación de uno a muchos. Cada cliente
aparece una vez en la tabla de clientes, pero puede aparecer varias veces en la tabla Pedidos. Esto refleja el hecho de
que un negocio puede colocar muchos pedidos, pero cada orden puede ser colocado por un cliente. Otros ejemplos
de relaciones uno-a-muchos incluyen:

• La relación entre los estados y países. Un país puede contener muchos estados, solo un estado puede estar en un país.
• La relación entre el equipo y los trabajadores en un inventario de equipos. Un trabajador puede pedir varias piezas del
equipo, pero cada pieza del equipo puede ser prestado a un trabajador.
Tenga en cuenta que a veces la relación se define por los hechos del mundo real, como es el caso de los estados y los
países, a veces por la razón que encarna la base de datos, como es el caso con el ejemplo de inventario de equipos. En
este último, significa que los trabajadores no tienen equipos, por lo que los modelos de base de datos de este hecho
son una relación de uno a muchos. Si los trabajadores hicieron equipo de acción, entonces esto no fue una relación de
uno a muchos. La comprensión de los procesos de negocio que a modelar una base de datos es una parte esencial del
proceso de diseño.

La implementación de una relación uno-a-muchos


Puede implementar relaciones de uno con muchos mediante el uso de una restricción de clave externa. Puede crear
una clave externa como parte de la definición de tabla de Transact-SQL, o puede crear por separado, después de la
creación de una mesa. La definición de clave externa específica la tabla que contiene la columna de clave principal que
las referencias de clave externa.

El ejemplo de código crea dos tablas, llamadas de los clientes y pedidos. La definición de la tabla de clientes incluye
una clave principal en la columna CustomerID. La definición de la tabla de órdenes incluye una clave principal en la

https://translate.googleusercontent.com/translate_f 4/28
18/5/2018 https://translate.googleusercontent.com/translate_f

columna ID de pedido y una clave externa en la columna ID de cliente, que hace referencia a la columna CustomerID
de clientes.

Creación de tablas y limitaciones

Crear una tabla Clientes


(CustomerID INT NOT NULL
, Nombre VARCHAR (50) NO NULO
, DateOfBirth DATETIME NULL
, Dirección VARCHAR (50) NOT NULL
CONSTRAINT PK_Customers PRIMARY KEY (CustomerID));
IR
Instrucciones CREAR MESA
(IdPedido INT NOT NULL
, CustomerID INT NOT NULL
, OrderDate DATETIME NOT NULL
CONSTRAINT PK_OrderID PRIMARY KEY (ID de pedido)
Restricción de clave externa FK_Orders_Customers (CustomerID)
Referencias Clientes (IdCliente));
IR

Consideraciones para la creación de contraventanas


Tenga en cuenta los siguientes puntos en la planificación de las claves externas:

• Sólo se pueden crear relaciones de clave externa entre las columnas que se encuentran en la misma base de datos.
• Puede crear una clave externa que haga referencia a un tipo diferente de una llamada única en el lugar de una clave principal.
Una tabla solo puede tener una clave principal, por lo que usted puede necesitar para imponer la unidad en una columna adicional,
se puede usar una única vez para hacer esto. Sin embargo, la mayoría de las claves externas de referencia claves primarias.

Las relaciones opcionales y obligatorios


Jueves, 21 de abril de 2016
17:49

imagen de diapositiva
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image005.png

Notas para el instructor (PPT texto)

Contenido Libro del alumno

https://translate.googleusercontent.com/translate_f 5/28
18/5/2018 https://translate.googleusercontent.com/translate_f

Al crear tablas y limitaciones, es importante tener en cuenta los valores NULL. Cuando se crea una tabla, puede definir
el estado de nulabilidad para cada columna. Nulabilidad se refiere a si se permite o no la columna a contener valores
nulos.

En el siguiente ejemplo de código, se puede ver que la definición de la tabla permite valores NULL para la columna de
DateOfBirth, pero no para las otras columnas.

Crear tabla que especifica nulabilidad.


CREAR tabla empleados
(EmployeeID INT NOT NULL
, Nombre VARCHAR (50) NO NULO
, DateOfBirth DATETIME NULL
, DepartmentID INT NOT NULL
CONSTRAINT PK_Employees PRIMARY KEY (EmployeeID)
Restricción de clave externa FK_Employees_Departments (DepartmentID)
REFERENCIAS Departamentos (DepartmentID));
IR

No se puede crear una clave principal en una columna que permita valores nulos, sino una columna de clave externa
no tiene esta restricción. Aún cuando no se permite valores nulos en una columna de clave externa dependiente de la
lógica de negocio que define la relación. Por ejemplo, en la tabla empleados en el ejemplo de código anterior, las
columnas de clave externa DepartmentID se designa NOT NULL, lo que significa que la columna no puede contener
valores nulos. La lógica que determina que cada empleado debe estar asociado a un departamento dentro de una
empresa, por lo que cada empleado debe tener un valor DepartmentID asociada, válida. Este es un ejemplo de una
relación obligatoria, en la que permite valores NULL se rompían la regla de negocio. Sin embargo, la regla de negocios
podría indicar que los empleados no tienen que estar asociados con un departamento específico, porque los
empleados se asocian con varios departamentos, los departamentos cambian con frecuencia, o porque la empresa no
tiene una estructura departamental y claramente definida. En este escenario, se puede permitir valores NULL en la
columna de la propiedad DepartmentID clave. Esto significó que, siempre que sea posible, los empleados estarían
asociados con un departamento, pero esto también permitiría que los empleados fueran en estado incierto
departamental o impredecible. Este es un ejemplo de una relación opcional. pero esto también permitiría que los
clientes fueran en estado incierto departamental o impredecible. Este es un ejemplo de una relación opcional. pero
esto también permitiría que los clientes fueran en estado incierto departamental o impredecible. Este es un ejemplo de
una relación opcional.

Uno-a-uno Relaciones
Jueves, 21 de abril de 2016
17:50

imagen de diapositiva

https://translate.googleusercontent.com/translate_f 6/28
18/5/2018 https://translate.googleusercontent.com/translate_f

C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image006.png

Notas para el instructor (PPT texto)

Contenido Libro del alumno


Una relación de uno a uno es similar a una relación de uno a varios, con la diferencia de que, en una relación de uno a
uno, cada valor en la columna de clave primaria tiene un único valor coincidente en la columna de clave externa. En
general, las relaciones uno a uno no son tan comunes como las relaciones uno a muchos. Por ejemplo, imagine que
una base de datos de un gimnasio almacena información sobre sus clientes en una tabla de Clientes; esto podría incluir
su altura, edad, peso y otras características físicas relevantes. Si la mayoría de las consultas en la tabla Clientes
devuelven solo las columnas Nombre y Dirección, y no la edad, el peso, la altura y otras columnas, podría ser más
eficiente descomponer la tabla Clientes y almacenar estas columnas en una tabla CustomerDetails separada.
Descomponer la tabla de esta manera podría mejorar los tiempos de respuesta porque sería posible leer la tabla de
Clientes más pequeños desde el disco más rápidamente. En este ejemplo, ambas tablas probablemente usarían
CustomerID como clave principal. Para mantener la integridad referencial, crearía una relación de clave externa entre la
columna CustomerID en CustomerDetails y la columna Customer ID en Customers. Si la relación es obligatoria, la
'dirección' de la clave externa (de CustomerDetails a Customers o de Customers a CustomerDetails) realmente no
importa. Puede crearlo en cualquier tabla, haciendo referencia a la otra tabla en la definición de clave externa. Sin
embargo, si la relación es opcional y se permitirán valores NULL en un lado de la relación, debe crear la clave externa
en el lado de la relación que permita valores NULL.

Nota: Una clave externa no garantiza la unidad de la manera que una clave principal lo hace, en una relación uno-a-
uno, la columna de clave externa podría contener valores duplicados. Para garantizar la unicidad en la columna de
clave externa, puede utilizar una clave primaria o una restricción única.

Las relaciones muchos-a-muchos


Jueves, 21 de abril de 2016
17:50

imagen de diapositiva

https://translate.googleusercontent.com/translate_f 7/28
18/5/2018 https://translate.googleusercontent.com/translate_f

C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image007.png

Notas para el instructor (PPT texto)

Contenido Libro del alumno


Existe una relación de muchos años cuando los valores de datos en ambos lados de la relación pueden representarse
varias veces. Esto difiere de una relación uno-a-muchos, en el que los valores de un lado de la relación deben ser
únicos. Por ejemplo, imagine una tabla de empleados que ha sido normalizado de manera que los datos sobre el
número de teléfono de cada uno y el departamento se almacenan en tablas separadas, llamado PHONENUMBERS y
Departamentos. Empleado incluye el EmployeeID columna, PHONENUMBERS incluye la columna PhoneNumberID, y
Departamentos incluye el DepartmentID columna. Cada tabla contiene columnas adicionales que dependen de sus
columnas de clave principal. La lógica de negocio permite que cada empleado tenga varios números de teléfono, y que
se puede utilizar por varios empleados de la misma. Similar,

Que representa una relación de muchos en una base de datos no es tan simple como que representa una relación de
uno a muchos. Para llevar a cabo una relación de muchas cosas entre las tablas en dos tablas que por lo general crea
una tercera tabla, que se refiere a veces como una tabla de intersección, una mesa de enlace, o unirse a una mesa. Por
ejemplo, para representar la relación de muchos entre los empleados y sus números de teléfono descritas
anteriormente, se puede:

• Crear una tabla llamada EmployeePhoneNumber con las columnas de empleado y PhoneNumberID. Estas dos columnas
sirven como una clave principal compuesta de la tabla.
• Crear una relación de clave externa en la columna de empleados de los empleados que hace referencia de empleado en
EmployeePhoneNumber.
• Crear una relación de clave externa en la columna de la PhoneNumberID de empleados que hace referencia a
PhoneNumberID en EmployeePhoneNumber.
La tabla de intersección EmployeePhoneNumber puede contener varios valores para las columnas EmployeeID y
PhoneNumberID, pero la combinación de estos dos valores es única para cada fila. Puede crear una tabla de
intersección llamada EmployeeDepartment de la misma manera para habilitar la relación de muchos a muchos entre
Empleados y Departamentos.

Súper-Tipos y Sub-Tipos
Jueves, 21 de abril de 2016
5:50 p.m.

Slide Image

https://translate.googleusercontent.com/translate_f 8/28
18/5/2018 https://translate.googleusercontent.com/translate_f

C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image008.png

Notas del instructor (TEXTO PPT)

Contenido del libro del alumno


A veces es posible identificar entidades en una base de datos que en realidad son tipos diferentes de la misma cosa.
Por ejemplo, imagine un ERD que contenga las entidades SalesPerson y Technician, que representan los tipos de roles
laborales que los individuos tienen dentro de una organización. Tanto los vendedores como los técnicos son subtipos
de la categoría Empleado. En este escenario, Employee es el súper tipo de SalesPerson y técnico. Los subtipos tienen
múltiples atributos en común; en el ejemplo del empleado, esto puede incluir la dirección, DateOfBirth y SSN.

Al implementar tablas para representar subtipos, tiene dos opciones:

• Generalización . La generalización implica el almacenamiento de todos los atributos de los subtipos en una sola tabla. Por
ejemplo, puede crear una sola tabla de Empleados que incluya todos los atributos necesarios para describir los subtipos
SalesPerson y Technician . En este escenario, no habría una tabla dedicada para cada uno de los subtipos. Las tablas
generalizadas a menudo pueden contener una gran cantidad de valores NULL porque muchos atributos no serán relevantes para
todos los subtipos. Por ejemplo, el atributo ID de cuenta , que identifica la cuenta que gestiona un vendedor, no es relevante para
los técnicos. Del mismo modo, el atributo SkillID , que identifica la habilidad técnica de un técnico, no es relevante para los
vendedores. En consecuencia, esperaría ver una gran cantidad de NULL en estas dos columnas. Una tabla que tiene una gran
cantidad de valores NULL a veces se denomina tabla dispersa .
• Especialización . La especialización implica la creación de una tabla para almacenar los atributos comunes, y
adicionalmente una tabla separada para cada subtipo para almacenar los atributos que son únicamente relevantes para ese subtipo.
Por ejemplo, puede crear una tabla principal de Empleados que contenga los atributos compartidos, y una tabla de Técnicos y
una tabla SalesPerson para almacenar los atributos que son específicos de esos subtipos. Las tres mesas de empleado podría
utilizar como clave principal, y las tablas del subtipo tendrían claves externas que hacen referencia a la columna de empleado de
los empleados en una relación uno-a-uno.

Relaciones autorreferenciales
Jueves, 21 de abril de 2016
5:50 p.m.

Slide Image

https://translate.googleusercontent.com/translate_f 9/28
18/5/2018 https://translate.googleusercontent.com/translate_f

C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image009.png

Notas del instructor (TEXTO PPT)

Contenido del libro del alumno


Una relación de autorreferencia ocurre cuando existe una relación uno a muchos o uno a uno dentro de una sola tabla.
Por ejemplo, imagine una tabla de Empleados que incluya las columnas EmployeeID y ManagerID. La columna
ManagerID indica la identificación del empleado del gerente para cualquier empleado dado. Los valores en la columna
ManagerID son un subconjunto de los valores en la columna EmployeeID. Para mantener la integridad referencial entre
las columnas, debe crear una clave externa en la columna ManagerID que haga referencia a la columna EmployeeID.

Una relación de autorreferencia podría ser opcional o podría ser necesaria. Por ejemplo, en la tabla Empleados, una
regla comercial podría ser que cada empleado debe tener un administrador (incluidos los propios gerentes); esto sería
una relación requerida porque no se permitirían NULL en la columna ManagerID. Sin embargo, si la regla comercial
establece que algunos gerentes no necesitan tener gerentes propios (por ejemplo, el CEO), entonces se convierte en
una relación opcional porque la columna ManagerID debe permitir valores NULL.

Lección 2: planificación de la integridad referencial


Jueves, 21 de abril de 2016
5:50 p.m.

Slide Image

https://translate.googleusercontent.com/translate_f 10/28
18/5/2018 https://translate.googleusercontent.com/translate_f

C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image010.png

Notas del instructor (TEXTO PPT)


Es importante enfa zar que la integridad referencial en cascada puede tener consecuencias serias e involuntarias y
solo debe usarse después de una planificación cuidadosa.

Pregunta

Un administrador junior informó que, cuando eliminó una fila en una tabla en la base de datos OLTP de su
organización, la acción provocó inesperadamente la eliminación de más de 100 filas. Verifica con éxito que existan las
restricciones de clave foránea necesarias. ¿Cuál fue la causa más probable de las eliminaciones inesperadas?

() Opción 1: se configuró una restricción de clave externa con la opción ON DELETE SET NULL.

() Opción 2: se configuró una restricción de clave externa con la opción ON DELETE SET DEFAULT.

() Opción 3: se configuró una restricción de clave externa con la opción ON DELETE CASCADE.

() Opción 4: se configuró una restricción de clave externa con la opción ON UPDATE CASCADE.

Responder

(√) Opción -2: Se configuró una restricción de clave externa con la opción ON DELETE CASCADE.

Contenido del libro del alumno


Resumen de la lección

Las restricciones de clave externa limitan los valores que puede agregar a una columna, y también evitan la
actualización o eliminación de valores en la columna a la que se hace referencia, cuando esos valores también existen
en la columna de clave externa. Si bien este es el comportamiento predeterminado para las restricciones de clave
externa, hay algunos escenarios en los que es posible que desee alterar este comportamiento, por ejemplo, al propagar
actualizaciones o eliminar desde la columna referenciada a la columna de clave externa. Esta lección describe las
opciones para implementar la integridad referencial y explica las consideraciones para implementar la integridad
referencial en cascada.

OBJETIVOS

Después de completar esta lección, podrás:

• Describe las opciones para implementar integridad referencial.


• Describe las opciones de cambios en cascada a los datos.

https://translate.googleusercontent.com/translate_f 11/28
18/5/2018 https://translate.googleusercontent.com/translate_f

Opciones para implementar la integridad referencial


Jueves, 21 de abril de 2016
5:51 p.m.

Slide Image
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image011.png

Notas del instructor (TEXTO PPT)

Contenido del libro del alumno


En términos generales, existen dos enfoques para implementar la integridad referencial: estos son la integridad
referencial declarativa y la integridad referencial procesal.

Integridad referencial declarativa


La integridad referencial declarativa implica el uso de restricciones para mantener la integridad, como se describe en la
lección anterior de este módulo. Las restricciones suelen ser el método preferido para mantener la integridad porque
son eficientes en la forma en que operan. Por ejemplo, cuando una instrucción de Transact-SQL intenta insertar una
nueva fila en una tabla, cualquier restricción de clave externa en esa tabla verificará los nuevos valores de datos en la
declaración contra las columnas referenciadas, para garantizar que sean válidos antes de insertar la nueva fila. Solo si
los valores de los datos pasan esta verificación se inserta la nueva fila. El mismo enfoque se aplica a las actualizaciones
de las filas; el valor actualizado debe coincidir con un valor en la columna de clave principal a la que se hace referencia.
Agregar una restricción de clave externa también evita actualizaciones y eliminaciones en la columna de clave principal
referenciada que haría que los datos en la clave externa no sean válidos. Por ejemplo, la supresión del valor '23' de una
columna de clave principal a la que hace referencia una clave externa no se permitiría si la columna de clave externa
contiene el valor '23'; esto es porque rompería la integridad referencial entre los dos columnas

Integridad referencial procesal


La integridad referencial procesal implica el uso de factores desencadenantes para hacer cumplir las reglas de
integridad. Un desencadenador es un objeto de base de datos que contiene una instrucción de Transact-SQL. Un
desencadenante está asociado con una tabla particular, y se produce en respuesta a actualizaciones, inserciones o
eliminaciones en esa tabla. La instrucción de Transact-SQL en un desencadenador puede realizar acciones para
garantizar que la integridad referencial se mantenga en respuesta a los cambios en los datos. SQL Server 2016 admite
desencadenadores de lenguaje de manipulación de datos (DML). Los activadores DML incluyen desencadenadores
AFTER y activadores INSTEAD OF.

• DESPUÉS de desencadenadores . Normalmente, utiliza desencadenadores AFTER para mantener la integridad referencial,
pero solo cuando una restricción de clave externa no es adecuada. Por ejemplo, puede usar un desencadenador AFTER si es
necesario para mantener la integridad en múltiples bases de datos porque las restricciones de clave externa solo pueden forzar la
integridad dentro de una base de datos. Como su nombre indica, se produce un desencadenador AFTER luego de que finaliza una
operación para insertar, actualizar o eliminar datos. Si usó un desencadenador AFTER para duplicar el comportamiento de una
https://translate.googleusercontent.com/translate_f 12/28
18/5/2018 https://translate.googleusercontent.com/translate_f
restricción de clave externa y solo permite valores de datos válidos en una columna en particular, el desencadenante lo lograría
primero permitiendo que ocurra el cambio, y solo luego verificando los valores de los datos e invirtiendo o rodando respalde el
cambio de datos si es necesario. En primer lugar, este enfoque es menos eficiente que la prevención de cambios no válidos, como
lo hace una restricción de clave externa.
• EN LUGAR DE desencadenantes . EN LUGAR DE desencadenadores funcionan al ejecutar la instrucción de Transact-
SQL almacenada en el desencadenador en lugar de realizar la acción desencadenante, como una actualización. Por ejemplo, si
desea evitar que se actualice una columna, puede usar un desencadenador INSTEAD OF para devolver un mensaje que explique
que no se permiten las actualizaciones. El desencadenante ocurriría en respuesta a una actualización, la actualización no ocurriría y
el mensaje sería devuelto en su lugar. EN LUGAR DE desencadenadores puede ser útil para aplicar las reglas de datos que las
restricciones no pueden aplicar. Por ejemplo, puede usar una restricción CHECK para imponer un límite de la cantidad de
elementos permitidos en cualquier orden. La restricción verificará el número de elementos y permitirá que la transacción continúe
si la cantidad de elementos está por debajo del umbral, y lo evitará si no lo hace. Sin embargo, si este tipo de operación de
verificación requiere referencias de datos en una tabla diferente, una restricción CHECK no es adecuada, por lo que podría utilizar
un desencadenador en su lugar. Puede usar la instrucción CREATE TRIGGER de Transact-SQL para crear desencadenantes.
Para obtener más información sobre la creación de desencadenantes, consulte:

Disparadores DML

http://aka.ms/jv2m72

Integridad referencial en cascada


Jueves, 21 de abril de 2016
5:51 p.m.

Slide Image
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image012.png

Notas del instructor (TEXTO PPT)

Contenido del libro del alumno


Las actualizaciones de los datos existentes pueden potencialmente romper la integridad referencial. Por ejemplo,
imagine una tabla Customers y una tabla Orders, ambas incluyen una columna llamada CustomerID; la columna
CustomerID en Pedidos tiene una restricción de clave externa que hace referencia a la columna CustomerID en
Clientes, y esta restricción garantiza que todos los pedidos estén asociados con un valor CustomerID válido. Si
actualizaste un valor CustomerID en Clientes, los valores correspondientes de CustomerID en Pedidos no serían válidos
y el conjunto de datos se vería comprometido porque contendría pedidos sin clientes asociados. Una clave externa
https://translate.googleusercontent.com/translate_f 13/28
18/5/2018 https://translate.googleusercontent.com/translate_f

evita este comportamiento por defecto. Sin embargo, a veces, en lugar de evitar cambios en los datos en la clave
principal, es posible que desee permitir estos cambios y propagarlos para que todas las columnas relacionadas se
actualicen en consecuencia. Esto se llama integridad referencial en cascada.

Cuando crea una restricción de clave externa, puede definir cómo manejar la integridad referencial en cascada. Puede
definir una acción separada para las actualizaciones y las eliminaciones. Las opciones incluyen:

• Ninguna acción. Si configura NO ACTION, el cambio no está permitido y el usuario recibe un mensaje de error. Esta es la
configuración predeterminada, que se aplica si no especifica ninguna otra acción.
• CASCADA . La opción CASCADE permite que el cambio se produzca en la columna de clave principal y también hace que
el cambio se propague a la columna en la tabla de clave externa. Por ejemplo, si actualiza un valor CustomerID en Customers,
todas las instancias correspondientes del valor en CustomerID en Pedidos también se actualizarán al nuevo valor. Si bien esto
podría parecer inicialmente la solución ideal, debe tener mucho cuidado con la implementación de esta opción, ya que puede tener
graves consecuencias, como:
o Si configura la clave externa para eliminar en cascada de la tabla de clave principal, la eliminación de una fila en la
tabla de clave principal provocará la eliminación de todas las filas correspondientes en la tabla de clave externa. Por
ejemplo, eliminar un cliente de la tabla Clientes también eliminaría todas las órdenes de ese cliente.
o Si aplica actualizaciones en cascada, las tablas en la base de datos mantendrán la integridad referencial. Sin embargo, a
menudo es importante mantener la integridad en múltiples bases de datos; por ejemplo, puede cargar periódicamente datos
de pedidos de más de un mes en un depósito de datos. El almacén de datos puede contener pedidos para el cliente A. Si
actualiza el registro CustomerID del cliente A en Clientes en la base de datos OLTP al cliente Z, los registros anteriores en
el almacén de datos no se actualizarán. La próxima vez que cargue pedidos en el almacén de datos, los registros para el
Cliente A y el Cliente Z no serán reconocidos como el mismo cliente. Puede usar activadores para mantener la integridad
entre las diferentes bases de datos.
o Si la conexión en cascada está configurada en varias tablas, es posible que una sola acción de eliminación tenga
consecuencias de gran alcance. Es importante, por lo tanto, planificar cuidadosamente para decidir si la conexión en
cascada es un comportamiento apropiado en el contexto específico de cualquier base de datos dada.
• SET NULL . La opción SET NULL establece el valor en la columna de referencia de la clave externa en NULL si el valor
de la clave principal se elimina o se actualiza. Esto puede generar filas en la columna de clave externa que a veces se denominan
huérfanos, porque no tienen un valor correspondiente en la tabla de clave primaria principal.
• SET DEFAULT . La opción SET DEFAULT funciona de manera similar a la opción SET NULL, excepto que en lugar de
establecer valores en NULL, los establece en un valor predeterminado, como 'desconocido' o 'parent deleted'.

Nota: La capacidad de realizar cambios en cascada en los datos de las tablas y columnas relacionadas es muy
poderosa, pero siempre debe planificar cuidadosamente antes de implementarla. Sin una planificación y una
implementación adecuadas, los cambios en cascada pueden tener graves consecuencias y pueden dar lugar a la
eliminación involuntaria de datos.

Demostración: Implementación de la integridad referencial mediante el uso


de una clave externa
Jueves, 21 de abril de 2016
5:51 p.m.
Slide Image

https://translate.googleusercontent.com/translate_f 14/28
18/5/2018 https://translate.googleusercontent.com/translate_f

C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image013.png

Notas del instructor (TEXTO PPT)


Pasos de preparación

Inicie las máquinas virtuales 10985A-MIA-DC y 10985A-MIA-SQL, y luego inicie sesión en 10985A-MIA-SQL como
ADVENTUREWORKS \ Student con la contraseña Pa $$ w0rd, y en la carpeta D: \ Demofiles \ Mod01, ejecute
Setup.cmd como administrador.

Pasos de demostración

1. Inicie las máquinas virtuales 10985A-MIA-DC y 10985A-MIA-SQL, y luego inicie sesión en 10985A-MIA-SQL como
ADVENTUREWORKS \ Student con la contraseña Pa $$ w0rd.

2. Abra Microsoft SQL Server Management Studio y luego conéctese a la instancia de MIA-SQL del motor de la base
de datos utilizando la Autenticación de Windows.

3. En el menú Archivo, seleccione Abrir, haga clic en Archivo, busque D: \ Demofiles \ Mod04, haga clic en
Integridad de referencia.sql y luego haga clic en Abrir.

4. En la ventana de consulta, debajo del comentario Crear una base de datos y cambiar el contexto de la base de
datos, seleccione la instrucción Transact-SQL y luego haga clic en Ejecutar.

5. En la ventana de consulta, debajo del comentario Crear tabla de clientes con una restricción de clave principal y
cuatro filas, revise la instrucción de Transact-SQL, seleccione la instrucción de Transact-SQL y luego haga clic en
Ejecutar.

6. En la ventana de consulta, bajo el comentario Crear una tabla con una restricción de clave externa, revise la
instrucción de Transact-SQL, seleccione la instrucción de Transact-SQL y luego haga clic en Ejecutar.

7. En la ventana de consulta, bajo el comentario Probar restricción de clave externa agregando una orden con un
valor CustomerID válido, revise la instrucción Transact-SQL, seleccione la instrucción Transact-SQL y luego haga clic en
Execute.

8. Tenga en cuenta que la instrucción se completa con éxito.

9. En la ventana de consulta, debajo del comentario Agregar una orden con un valor CustomerID no válido, revise la
instrucción Transact-SQL, seleccione la instrucción Transact-SQL y luego haga clic en Ejecutar.

10. En el panel Resultados, revise el mensaje que indica que la instrucción de inserción entró en conflicto con la
restricción de clave externa.

11. En la ventana de consulta, debajo del comentario Actualizar un valor CustomerID en Clientes que no tienen un
valor coincidente en Pedidos, revise la instrucción Transact-SQL, seleccione la instrucción Transact-SQL y luego haga
clic en Ejecutar.

https://translate.googleusercontent.com/translate_f 15/28
18/5/2018 https://translate.googleusercontent.com/translate_f

12. Tenga en cuenta que la instrucción se completa con éxito.

13. En la ventana de consulta, debajo del comentario Actualizar un valor CustomerID en Clientes que tiene un valor
coincidente en Pedidos, revise la instrucción Transact-SQL, seleccione la instrucción Transact-SQL y luego haga clic en
Ejecutar.

14. En el panel Resultados, revise el mensaje que indica que la instrucción de actualización entró en conflicto con la
restricción.

15. En la ventana de consulta, debajo del comentario Soltar clave externa y agregar nueva clave externa que
especifique la integridad referencial en cascada, revise la instrucción Transact-SQL, seleccione la instrucción Transact-
SQL y luego haga clic en Ejecutar.

dieciséis. En la ventana de consulta, bajo el comentario Prueba de integridad referencial en cascada, revise la
instrucción de Transact-SQL, seleccione la instrucción de Transact-SQL y luego haga clic en Ejecutar.

17. En el panel Resultados, revise los resultados y observe que la fila en la tabla Pedidos se actualizó correctamente.

18. Cierre SQL Server Management Studio sin guardar los cambios.

Contenido del libro del alumno


En esta demostración, verás cómo:

• Implementar restricciones de clave externa.


• Implementar integridad referencial en cascada.
Pasos de demostración

1. Inicie las máquinas virtuales 10985A-MIA-DC y 10985A-MIA-SQL, y luego inicie sesión en 10985A-MIA-SQL como
ADVENTUREWORKS \ Student con la contraseña Pa $$ w0rd.
2. Abra Microsoft SQL Server Management Studio y luego conéctese a la instancia de MIA-SQL del motor de la base de datos
utilizando la Autenticación de Windows.
3. En el menú Archivo, seleccione Abrir, haga clic en Archivo, busque D: \ Demofiles \ Mod04, haga clic en Integridad de
referencia.sql y luego haga clic en Abrir.
4. En la ventana de consulta, debajo del comentario Crear una base de datos y cambiar el contexto de la base de datos,
seleccione la instrucción Transact-SQL y luego haga clic en Ejecutar.
5. En la ventana de consulta, debajo del comentario Crear tabla de clientes con una restricción de clave principal y cuatro filas,
revise la instrucción de Transact-SQL, seleccione la instrucción de Transact-SQL y luego haga clic en Ejecutar.
6. En la ventana de consulta, bajo el comentario Crear una tabla con una restricción de clave externa, revise la instrucción de
Transact-SQL, seleccione la instrucción de Transact-SQL y luego haga clic en Ejecutar.
7. En la ventana de consulta, bajo el comentario Probar restricción de clave externa agregando una orden con un valor
CustomerID válido, revise la instrucción Transact-SQL, seleccione la instrucción Transact-SQL y luego haga clic en Execute.
8. Tenga en cuenta que la instrucción se completa con éxito.
9. En la ventana de consulta, debajo del comentario Agregar una orden con un valor CustomerID no válido, revise la
instrucción Transact-SQL, seleccione la instrucción Transact-SQL y luego haga clic en Ejecutar.
10. En el panel Resultados, revise el mensaje que indica que la instrucción de inserción entró en conflicto con la restricción de
clave externa.
11. En la ventana de consulta, debajo del comentario Actualizar un valor CustomerID en Clientes que no tienen un valor
coincidente en Pedidos, revise la instrucción Transact-SQL, seleccione la instrucción Transact-SQL y luego haga clic en Ejecutar.
12. Tenga en cuenta que la instrucción se completa con éxito.
13. En la ventana de consulta, debajo del comentario Actualizar un valor CustomerID en Clientes que tiene un valor coincidente
en Pedidos, revise la instrucción Transact-SQL, seleccione la instrucción Transact-SQL y luego haga clic en Ejecutar.
14. En el panel Resultados, revise el mensaje que indica que la instrucción de actualización entró en conflicto con la restricción.
15. En la ventana de consulta, debajo del comentario Soltar clave externa y agregar nueva clave externa que especifique la
integridad referencial en cascada, revise la instrucción Transact-SQL, seleccione la instrucción Transact-SQL y luego haga clic en
Ejecutar.
dieciséis. En la ventana de consulta, bajo el comentario Prueba de integridad referencial en cascada, revise la instrucción de
Transact-SQL, seleccione la instrucción de Transact-SQL y luego haga clic en Ejecutar.

https://translate.googleusercontent.com/translate_f 16/28
18/5/2018 https://translate.googleusercontent.com/translate_f

17. En el panel Resultados, revise los resultados y observe que la fila en la tabla Pedidos se actualizó correctamente.
18. Cierre SQL Server Management Studio sin guardar los cambios.

Escenario de laboratorio
Jueves, 21 de abril de 2016
5:51 p.m.

Slide Image
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image014.png

Notas del instructor (TEXTO PPT)

Laboratorio: planificación e implementación de la integridad referencial


Jueves, 21 de abril de 2016
5:51 p.m.

Slide Image
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image015.png

Notas del instructor (TEXTO PPT)


Ejercicio 1: planificación de la integridad referencial
https://translate.googleusercontent.com/translate_f 17/28
18/5/2018 https://translate.googleusercontent.com/translate_f

Usted ha establecido que las siguientes reglas comerciales deben ser aplicadas:

• Cada pedido debe estar asociado con un cliente específico.

• Cada línea de pedido debe estar asociada a un producto y un pedido válido.

• Los detalles del cliente deben estar asociados con un cliente válido.

En este ejercicio, usará un diagrama de base de datos para ayudarlo a planificar qué restricciones de clave externa
necesitará para hacer cumplir estas reglas.

Ejercicio 2: Implementación de la integridad referencial u lizando restricciones

Las siguientes relaciones existen en la base de datos:

• Una relación uno-a-uno entre Clientes y CustomerDetails.

• Una relación uno a muchos entre Clientes y Pedidos.

• Una relación de uno a muchos entre Pedidos y LineItems.

• Una relación uno a muchos entre Productos y LineItems.

Para implementar la integridad referencial requerida, debe crear las siguientes restricciones de clave externa:

• Una clave externa en OrderID en LineItems que hace referencia a OrderID en Pedidos.

• Una clave externa en ProductID en LineItems que hace referencia a ProductID en Productos.

• Una clave externa en CustomerID en Pedidos que hace referencia a CustomerID en Clientes.

• Una clave externa en CustomerID en CustomerDetails que hace referencia a CustomerID en Clientes.

En este ejercicio, implementará estas restricciones de clave externa.

Ejercicio 3: Implementación de la integridad referencial en cascada

Una regla comercial adicional establece que cada vez que se elimine un CustomerID de la tabla Clientes, lo que a
veces sucede cuando un cliente solicita que sus datos se eliminen de la base de datos, también se debe eliminar toda
la información asociada, incluidos los datos del cliente. Sin embargo, la tabla Pedidos hace referencia a la columna
CustomerID en la tabla Clientes, y no desea realizar eliminaciones en cascada de Clientes a Pedidos porque la
información del pedido es importante para fines de contabilidad e informes. En su lugar, debe asegurarse de que
cuando se borre una fila en Clientes, el valor CustomerID en Pedidos se actualice a un valor predeterminado. En este
ejercicio, configurará la integridad referencial para implementar estas reglas.

Contenido del libro del alumno


Guión

Usted trabaja para una organización llamada Adventure Works, que es un minorista de bicicletas y productos
asociados. Está planificando integridad referencial para una sección de una base de datos llamada OrdersDatabase,
una base de datos OLTP que realiza un seguimiento de los clientes, los pedidos que realizan y los productos que se
incluyen en los pedidos. Para implementar la integridad referencial, usará claves externas. Primero, planificará las claves
externas que necesitará para forzar la integridad; luego implementará las claves externas; y finalmente, implementarás
integridad referencial en cascada.

Objetivos

Después de completar esta práctica de laboratorio, tendrás:

• Integridad referencial planificada para una base de datos OLTP.


• Integridad referencial implementada mediante el uso de claves externas.
• Integridad referencial en cascada implementada.

https://translate.googleusercontent.com/translate_f 18/28
18/5/2018 https://translate.googleusercontent.com/translate_f

Ejercicio 1: planificación de la integridad referencial


Jueves, 21 de abril de 2016
5:52 p.m.

Contenido del libro del alumno


Exercise Scenario

You have established that the following business rules must be enforced:

• Every order must be associated with a specific customer.


• Every line item must be associated with a product and a valid order.
• Customer details must be associated with a valid customer.
In this exercise, you will use a database diagram to help you to plan which foreign key constraints you will need to
enforce these rules.

The main tasks for this exercise are as follows:

1. Prepare the Lab Environment

2. Iden fy Rela onships

3. Plan Foreign Keys

u Task 1: Prepare the Lab Environment

1. Ensure that the 10985A-MIA-DC and 10985A-MIA-SQL virtual machines are both running, and then log on to 10985A-
MIA-SQL as ADVENTUREWORKS\Student with the password Pa$$w0rd.
2. Browse to the D:\Labfiles\Lab04\Starter folder, and then run Setup.cmd as Administrator.

u Tarea 2: Identificar relaciones

1. Abra SQL Server Management Studio y conéctese a la instancia del Motor de base de datos MIA-SQL mediante la
Autenticación de Windows.
2. En la base de datos CustomerOrders, cree un diagrama de base de datos y luego agregue las siguientes tablas a él:

Detalles del cliente

Clientes

Pedidos

Productos

Ar culos de línea

3. Revise el diagrama de la base de datos y determine las relaciones entre las tablas y los tipos de relaciones que son (uno a
uno, uno a muchos o muchos a muchos).

u Tarea 3: Planificar claves externas

1. Utilice el diagrama de la base de datos y las reglas de negocio para decidir qué restricciones de clave externa debe crear para
imponer la integridad referencial. Incluya en sus consideraciones qué columnas deben tener una clave externa y a qué columna
debe hacer referencia cada clave externa.
2. Después de planificar las claves externas, guarde el diagrama de la base de datos como Llaves .
https://translate.googleusercontent.com/translate_f 19/28
18/5/2018 https://translate.googleusercontent.com/translate_f

3. Cierre el panel de diagrama de la base de datos.

Resultados: después de completar este ejercicio, habrá identificado las claves necesarias para aplicar las reglas de integridad
referencial.

Ejercicio 2: Implementación de la integridad referencial u lizando


restricciones
Jueves, 21 de abril de 2016
5:52 p.m.

Contenido del libro del alumno


Escenario de ejercicio

Las siguientes relaciones existen en la base de datos:

• Una relación uno-a-uno entre Clientes y CustomerDetails.


• Una relación uno a muchos entre Clientes y Pedidos.
• Una relación de uno a muchos entre Pedidos y LineItems.
• Una relación uno a muchos entre Productos y LineItems.
Para implementar la integridad referencial requerida, debe crear las siguientes restricciones de clave externa:

• Una clave externa en OrderID en LineItems que hace referencia a OrderID en Pedidos .
• Una clave externa en ProductID en LineItems que hace referencia a ProductID en Productos .
• Una clave externa en CustomerID en Pedidos que hace referencia a CustomerID en Clientes .
• Una clave externa en CustomerID en CustomerDetails que hace referencia a CustomerID en Clientes .
En este ejercicio, implementará estas restricciones de clave externa.

Las principales tareas para este ejercicio son las siguientes:

1. Implemente una clave externa en la tabla de pedidos

2. Implementar una clave externa en la tabla CustomerDetails

3. Implementar claves externas en la tabla LineItems

u Tarea 1: implementar una clave externa en la tabla de pedidos

1. En una ventana de consulta en SQL Server Management Studio, escriba una instrucción ALTER TABLE de Transact-SQL
para crear una restricción de clave externa llamada FK_Orders_Customers en la columna CustomerID en la tabla Orders que hace
referencia a la columna CustomerID en la tabla Customers. No incluya una cláusula ON UPDATE o ON DELETE.
2. Para probar la clave externa, escriba una instrucción INSERT de instrucción Transact-SQL para agregar una fila a la tabla
Pedidos utilizando los siguientes valores:
• OrderID = 105
• CustomerID = 2
• OrderDate = GETDATE ()
3. Esta instrucción INSERT debe tener éxito.
4. Para volver a probar la clave externa, escriba una instrucción INSERT de instrucción Transact-SQL para agregar una fila a la
tabla Pedidos utilizando los siguientes valores:
• OrderID = 106
• CustomerID = 5
• OrderDate = GETDATE ()
https://translate.googleusercontent.com/translate_f 20/28
18/5/2018 https://translate.googleusercontent.com/translate_f

5. Esta declaración INSERT debe evitarse mediante la restricción de clave externa porque el valor 5 de CustomerID no existe
en la tabla Clientes.

u Tarea 2: implementar una clave externa en la tabla CustomerDetails

1. En la misma ventana de consulta, escriba una instrucción ALTER TABLE de Transact-SQL para crear una restricción de
clave externa llamada FK_CustomerDetails_Customers en la columna CustomerID en la tabla CustomerDetails que hace
referencia a la columna CustomerID en la tabla Customers. No incluya una cláusula ON UPDATE o ON DELETE.
2. Para probar la clave externa, escriba una instrucción INSERT de instrucción Transact-SQL para agregar una fila a la tabla
CustomerDetails usando los siguientes valores:
o CustomerID = 5
o Dirección = '9832 Mt. Dias Blv. '
o Ciudad = 'Chicago'

Código Postal = '97321'

o DateOfBirth = '08 / 09/1970 '


3. Esta declaración INSERT debe evitarse mediante la restricción de clave externa porque el valor 5 de CustomerID no existe
en la tabla Clientes.

u Tarea 3: Implementar claves externas en la tabla LineItems


1. En la misma ventana de consulta en SQL Server Management Studio, escriba una instrucción ALTER TABLE de Transact-SQL
para crear una restricción de clave externa llamada FK_LineItems_Orders en la columna OrderID en la tabla LineItems que hace
referencia a la columna OrderID en la tabla Pedidos. No incluya una cláusula ON UPDATE o ON DELETE.
2. Para probar la clave externa, escriba una instrucción INSERT de instrucción Transact-SQL para agregar una fila a la tabla
LineItems utilizando los siguientes valores:
• OrderID = 101
• ProductID = 33
• Precio por unidad = 30.00
• Cantidad = 1
3. Esta instrucción INSERT debe tener éxito.
4. Para volver a probar la clave externa, escriba una instrucción INSERT de instrucción Transact-SQL para agregar una fila a la
tabla LineItems utilizando los siguientes valores:

OrderID = 106

ProductID = 44

Precio por unidad = 30.00

Can dad = 1

5. Esta declaración INSERT debe evitarse mediante la restricción de clave externa porque el valor OrderID 106 no existe en la
tabla Orders.
6. En la misma ventana de consulta en SQL Server Management Studio, escriba una instrucción ALTER TABLE de Transact-
SQL para crear una restricción de clave externa llamada FK_LineItems_Products en la columna ProductID en la tabla LineItems
que hace referencia a la columna ProductID en la tabla Products. No incluya una cláusula ON UPDATE o ON DELETE.
7. Para probar la clave externa, escriba una instrucción INSERT de instrucción Transact-SQL para agregar una fila a la tabla
LineItems utilizando los siguientes valores:
• OrderID = 102
• ProductID = 22
• Precio por unidad = 15.00
• Cantidad = 1
8. Esta instrucción INSERT debe tener éxito.
9. Para volver a probar la clave externa, escriba una instrucción INSERT de instrucción Transact-SQL para agregar una fila a la
tabla LineItems utilizando los siguientes valores:

OrderID = 104

ProductID = 66

https://translate.googleusercontent.com/translate_f 21/28
18/5/2018 https://translate.googleusercontent.com/translate_f

Precio por unidad = 30.00

Can dad = 1

10. Esta declaración INSERT debe evitarse mediante la restricción de clave externa porque el valor 66 de ProductID no existe
en la tabla Productos.
11. Cierre la ventana de consulta y guarde el archivo como CreateForeignKeys.sql en la carpeta D: \ Labfiles \ Lab04 \ Starter.
12. Abra el diagrama de la base de datos de claves y revíselo, señalando que incluye las relaciones de claves externas que creó
en este ejercicio.

Resultados: después de completar este ejercicio, habrá implementado la integridad referencial en la base de datos OrdersDatabase
usando restricciones.

Ejercicio 3: Implementación de la integridad referencial en cascada


Jueves, 21 de abril de 2016
5:52 p.m.

Contenido del libro del alumno


Escenario de ejercicio

Una regla comercial adicional establece que cada vez que se elimine un CustomerID de la tabla Clientes, lo que a
veces sucede cuando un cliente solicita que sus datos se eliminen de la base de datos, también se debe eliminar toda
la información asociada, incluidos los datos del cliente. Sin embargo, la tabla Pedidos hace referencia a la columna
CustomerID en la tabla Clientes, y no desea realizar eliminaciones en cascada de Clientes a Pedidos porque la
información del pedido es importante para fines de contabilidad e informes. En su lugar, debe asegurarse de que
cuando se borre una fila en Clientes, el valor CustomerID en Pedidos se actualice a un valor predeterminado. En este
ejercicio, configurará la integridad referencial para implementar estas reglas.

Las principales tareas para este ejercicio son las siguientes:

1. Configure la integridad referencial en cascada en la tabla CustomerDetails

2. Configure SET DEFAULT en la tabla de pedidos

u Tarea 1: configurar la integridad referencial en cascada en la tabla CustomerDetails

1. En SQL Server Management Studio, en una nueva ventana de consulta, escriba y ejecute una instrucción Transact-SQL para
eliminar la fila de la tabla Clientes que tiene el valor 2 de CustomerID. La eliminación debe fallar debido a una restricción de clave
externa.
2. Escriba y ejecute una instrucción ALTER TABLE de Transact-SQL para descartar la restricción
FK_CustomerDetails_Customers en la tabla CustomerDetails.
3. Escriba y ejecute una instrucción ALTER TABLE de Transact-SQL para crear una nueva restricción de clave externa
llamada FK_CustomerDetails_Customers en la tabla CustomerDetails. Incluye una cláusula para implementar acciones de
eliminación en cascada.
4. Intente eliminar la fila de la tabla Customers que tiene el valor CustomerID 2 nuevamente. La eliminación debería fallar de
nuevo debido a la restricción de clave externa en la tabla Pedidos.

u Tarea 2: configurar SET DEFAULT en la tabla de pedidos

1. En la misma ventana de consulta Transact-SQL, escriba y ejecute una instrucción ALTER TABLE de Transact-SQL que crea
una restricción predeterminada en la columna CustomerID en Pedidos, con un valor de 0.
2. Escriba y ejecute una instrucción de Transact-SQL que agregue una fila a la tabla Clientes utilizando los siguientes valores:
o CustomerID = 0
https://translate.googleusercontent.com/translate_f 22/28
18/5/2018 https://translate.googleusercontent.com/translate_f

o FirstName = 'No aplicable'


o LastName = 'No aplicable'
3. Escriba y ejecute una instrucción ALTER TABLE de Transact-SQL para descartar la restricción FK_Orders_Customers en la
tabla Orders.
4. Escriba y ejecute una instrucción ALTER TABLE de Transact-SQL para crear una nueva restricción de clave externa
llamada FK_Orders_Customers en la tabla Pedidos. Incluya una cláusula para establecer el valor predeterminado para las acciones
de eliminación.
5. Intente eliminar la fila de la tabla Customers que tiene el valor CustomerID 2 nuevamente. La eliminación debería tener
éxito.
6. Verifique que el Order 101 ahora tenga un valor CustomerID de 0.
7. Guarde el archivo de consulta como ImplementCascadingIntegrity.sql en la carpeta D: \ Labfiles \ Lab04 \ Starter.
8. Cierre SQL Server Management Studio.

Resultados: después de completar este ejercicio, habrá implementado la integridad referencial en


cascada.

Revisión de laboratorio
Jueves, 21 de abril de 2016
5:53 p.m.

Slide Image
Texto alternativo generado por la máquina: Revisión de
laboratorio • ¿Piensa que fue una buena idea implementar ON
DELETE CASCADE y las opciones ON DELETE SET
DEFAULT en el ejercicio final en el laboratorio? ¿Qué
problemas puedes causar esto potencialmente? ¿Qué podría haber
hecho para evitar estos problemas?

Notas del instructor (TEXTO PPT)


Pregunta

¿Cree que fue una buena idea implementar las opciones ON DELETE CASCADE y ON DELETE SET DEFAULT en el
ejercicio final en el laboratorio? ¿Qué problemas podría causar esto potencialmente? ¿Qué podría haber hecho para
evitar estos problemas?

Responder

Conectar en cascada la eliminación a la tabla CustomerDetails elimina toda la información del cliente para el cliente
eliminado; esto significa que es más di cil realizar análisis de datos más adelante cuando se basa en los datos
demográficos del cliente. El uso de la opción SET NULL en Pedidos da como resultado filas de orden que no están
asociadas a un cliente específico, sino que enen un valor CustomerID catch-all predeterminado. Eliminar el contexto
de un pedido de esta manera puede dificultar la agregación de datos de manera significa va, lo que de nuevo puede
reducir la u lidad de los datos para el análisis.

https://translate.googleusercontent.com/translate_f 23/28
18/5/2018 https://translate.googleusercontent.com/translate_f

Una posible solución sería usar disparadores para hacer copias de los datos antes de eliminarlos de las tablas. Esta
información podría ser u lizada con fines analí cos. Si es necesario eliminar los datos que iden fican a un cliente,
puede guardar selec vamente los elementos no iden ficables, como la ciudad donde vive el cliente, o su edad, y no
guardar los datos de iden ficación, como su nombre, número de teléfono, o dirección de la calle.

Clave de respuestas de laboratorio


Jueves, 21 de abril de 2016
5:53 p.m.

Contenido del libro del alumno


Laboratorio: planificación e implementación de la integridad referencial

Guión

Usted trabaja para una organización llamada Adventure Works, que es un minorista de bicicletas y productos
asociados. Está planificando integridad referencial para una sección de una base de datos llamada OrdersDatabase,
una base de datos OLTP que realiza un seguimiento de los clientes, los pedidos que realizan y los productos que se
incluyen en los pedidos. Para implementar la integridad referencial, usará claves externas. Primero, planificará las claves
externas que necesitará para forzar la integridad; luego implementará las claves externas; y finalmente, implementarás
integridad referencial en cascada.

Ejercicio 1: planificación de la integridad referencial

u Tarea 1: preparar el entorno de laboratorio

1. Asegúrese de que las máquinas virtuales 10985A-MIA-DC y 10985A-MIA-SQL se estén ejecutando, y luego inicie sesión
en 10985A-MIA-SQL como ADVENTUREWORKS \ Student con la contraseña Pa $$ w0rd.
2. En la carpeta D: \ Labfiles \ Lab04 \ Starter, haga clic con el botón derecho en Setup.cmd, haga clic en Ejecutar como
administrador y luego espere a que se complete la configuración.

u Tarea 2: Identificar relaciones

1. En la barra de tareas, haga clic en Microsoft SQL Server Management Studio, en el cuadro de diálogo Conectar al servidor,
en el campo Tipo de servidor, seleccione Motor de base de datos, en el campo Nombre del servidor, escriba MIA-SQL, en el
campo Autenticación, seleccione Autenticación de Windows y luego haz clic en Conectar.
2. En el Explorador de objetos, expanda Bases de datos, expanda Base de datos de pedidos, haga clic con el botón derecho en
Diagramas de base de datos y luego haga clic en Nuevo diagrama de base de datos.
3. Si aparece un cuadro de diálogo que le pregunta si desea crear objetos de soporte para la creación de diagramas de la base de
datos, haga clic en Sí.
4. En el cuadro de diálogo Agregar tabla , presione y mantenga presionada la tecla MAYÚS, haga clic en Productos , haga
clic en Agregar y luego en Cerrar .
5. Reorganiza las tablas para que puedas verlas todas al mismo tiempo. Puede hacer esto haciendo clic en el encabezado de la
tabla y arrastrando la tabla al lugar requerido.
6. Revise el diagrama de la base de datos y determine las relaciones entre las tablas y los tipos de relaciones que son (uno a
uno, uno a muchos o muchos a muchos).

u Tarea 3: Planificar claves externas

1. Revise nuevamente las tablas en el diagrama, anotando las columnas que están definidas como claves primarias, y que no
hay claves externas definidas.
2. Use las reglas comerciales para decidir qué claves foráneas debe crear para imponer la integridad referencial. Considere qué
columnas deben tener una clave externa y a qué columna debe hacer referencia cada clave externa.
3. En el menú Archivo , haz clic en Guardar diagrama_0 .
4. En el cuadro de diálogo Elegir nombre , escriba Claves y luego haga clic en Aceptar .
5. Cierre el panel de diagrama de la base de datos.

Ejercicio 2: Implementación de la integridad referencial utilizando restricciones

https://translate.googleusercontent.com/translate_f 24/28
18/5/2018 https://translate.googleusercontent.com/translate_f

u Tarea 1: implementar una clave externa en la tabla de pedidos

Nota: Puede encontrar las instrucciones de Transact-SQL completadas para este ejercicio en el archivo Create
ForeignKeys.sql en la carpeta D: \ Labfiles \ Lab04 \ Solution.

1. En SQL Server Management Studio, haga clic en Nueva consulta.


2. En la ventana de consulta, escriba la siguiente instrucción de Transact-SQL y luego haga clic en Ejecutar:
USE OrdersDatabase;
IR
ALTER TABLE Orders
ADD CONSTRAINT FK_Orders_Customers FOREIGN KEY (CustomerID)
REFERENCIAS Clientes (CustomerID);
IR

3. Para probar la clave externa, en la ventana de consulta, bajo las instrucciones de Transact-SQL existentes, escriba la
siguiente instrucción de Transact-SQL, selecciónela y luego haga clic en Ejecutar:
INSERT INTO Orders
VALORES (105,2, GETDATE ());
IR

4. Tenga en cuenta que INSERT es exitoso.


5. Para volver a probar la clave externa, en la ventana de consulta, en las instrucciones de Transact-SQL existentes, escriba la
siguiente instrucción de Transact-SQL, selecciónela y luego haga clic en Ejecutar:
INSERT INTO Orders
VALORES (106,5, GETDATE ());
IR

6. Tenga en cuenta que la restricción de clave externa impide el INSERT debido a que el valor 5 de CustomerID no existe en la
tabla Customers.

u Tarea 2: implementar una clave externa en la tabla CustomerDetails

1. En la ventana de consulta, en las instrucciones de Transact-SQL existentes, escriba la siguiente instrucción de Transact-SQL,
selecciónela y luego haga clic en Ejecutar:
ALTER TABLE CustomerDetails
ADD CONSTRAINT FK_CustomerDetails_Customers FOREIGN KEY (CustomerID)
REFERENCIAS Clientes (CustomerID);
IR

2. Para probar la clave externa, en la ventana de consulta, bajo las instrucciones de Transact-SQL existentes, escriba la
siguiente instrucción de Transact-SQL, selecciónela y luego haga clic en Ejecutar:
INSERT INTO CustomerDetails
VALORES (5, '9832 Mt. Dias Blv.', 'Chicago', '97321', '08 / 09/1970 ');
IR

3. Tenga en cuenta que la restricción de clave externa impide el INSERT debido a que el valor 5 de CustomerID no existe en la
tabla Customers.

u Tarea 3: Implementar claves externas en la tabla LineItems

1. En la ventana de consulta, en las instrucciones de Transact-SQL existentes, escriba la siguiente instrucción de Transact-SQL,
selecciónela y luego haga clic en Ejecutar:
ALTER TABLE LineItems
ADD CONSTRAINT FK_LineItems_Orders FOREIGN KEY (OrderID)
REFERENCES Pedidos (OrderID);
IR

https://translate.googleusercontent.com/translate_f 25/28
18/5/2018 https://translate.googleusercontent.com/translate_f

2. Para probar la clave externa, en la ventana de consulta, bajo las instrucciones de Transact-SQL existentes, escriba la
siguiente instrucción de Transact-SQL, selecciónela y luego haga clic en Ejecutar:
INSERT INTO LineItems
VALORES (101,33,30.00,1);
IR

3. Tenga en cuenta que INSERT es exitoso.


4. Para volver a probar la clave externa, en la ventana de consulta, debajo de las instrucciones de Transact-SQL existentes, escriba
la siguiente instrucción de Transact-SQL, selecciónela y luego haga clic en Ejecutar:
INSERT INTO LineItems
VALORES (106,44,30.00,1);
IR

5. Tenga en cuenta que el INSERT se previene porque el valor OrderID 106 no existe en la tabla Orders.
6. En la ventana de consulta bajo las instrucciones de Transact-SQL existentes, escriba la siguiente instrucción de Transact-
SQL, selecciónela y luego haga clic en Ejecutar:
ALTER TABLE LineItems
ADD CONSTRAINT FK_LineItems_Products FOREIGN KEY (ProductID)
REFERENCIAS Productos (ProductID);
IR

7. Para probar la clave externa, en la ventana de consulta, bajo las instrucciones de Transact-SQL existentes, escriba la
siguiente instrucción de Transact-SQL, selecciónela y luego haga clic en Ejecutar:
INSERT INTO LineItems
VALORES (102,22,15.00,1);
IR

8. Tenga en cuenta que INSERT es exitoso.


9. Para volver a probar la clave externa, en la ventana de consulta bajo las instrucciones de Transact-SQL existentes, escriba la
siguiente instrucción de Transact-SQL, selecciónela y luego haga clic en Ejecutar:
INSERT INTO LineItems
VALORES (104,66,30.00,1);
IR

10. Tenga en cuenta que el INSERT se previene porque el valor de ProductID 66 no existe en la tabla Products.
11. En el menú Archivo, haga clic en Guardar SQLQuery1.sql.
12. En el cuadro de diálogo Guardar archivo como, busque D: \ Labfiles \ Lab04 \ Starter, en el cuadro Nombre de archivo,
escriba CreateForeignKeys y luego haga clic en Guardar.
13. En Object Explorer, en OrdersDatabase, expanda Diagramas de base de datos y haga doble clic en dbo.Keys. Revise el
diagrama de la base de datos y tenga en cuenta que incluye las relaciones de claves externas que creó en este ejercicio.

Ejercicio 3: Implementación de la integridad referencial en cascada

u Tarea 1: configurar la integridad referencial en cascada en la tabla CustomerDetails

Nota: Puede encontrar las declaraciones de Transact-SQL completadas para este ejercicio en el archivo
ImplementCascadingIntegrity.sql en la carpeta D: \ Labfiles \ Lab04 \ Solution.

1. En SQL Server Management Studio, haga clic en Nueva consulta, en la ventana de consulta, escriba la siguiente instrucción
de Transact-SQL y luego haga clic en Ejecutar:
USE OrdersDatabase;
IR
ELIMINAR Clientes
DONDE CustomerID = 2;
IR

https://translate.googleusercontent.com/translate_f 26/28
18/5/2018 https://translate.googleusercontent.com/translate_f

2. Revise los resultados y tenga en cuenta que el DELETE falló debido a una restricción de clave externa.
3. En la ventana de consulta, debajo de las instrucciones de Transact-SQL existentes, escriba la siguiente instrucción de Transact-
SQL, selecciónela y luego haga clic en Ejecutar:
ALTER TABLE CustomerDetails
DROP CONSTRAINT FK_CustomerDetails_Customers;
IR
ALTER TABLE CustomerDetails
ADD CONSTRAINT FK_CustomerDetails_Customers FOREIGN KEY (CustomerID)
REFERENCIAS Clientes (CustomerID) AL ELIMINAR CASCADE;
IR

4. Seleccione la instrucción Transact-SQL que escribió en el paso 1 y luego haga clic en Ejecutar.
5. Revise los resultados y tenga en cuenta que el DELETE falló debido a la restricción de clave externa en la tabla Pedidos.

u Tarea 2: configurar SET DEFAULT en la tabla de pedidos

1. En la ventana de consulta, en las instrucciones de Transact-SQL existentes, escriba la siguiente instrucción de Transact-SQL,
que crea una restricción predeterminada en la columna CustomerID en Pedidos con un valor de 0. Seleccione la instrucción y
luego haga clic en Ejecutar:
ALTER TABLE Orders
ADD CONSTRAINT DEF_CustomerID
DEFAULT 0 PARA CustomerID;
IR

2. En las instrucciones de Transact-SQL existentes, escriba la siguiente instrucción de Transact-SQL, que agrega una fila a la
tabla Customers con un valor CustomerID de 0. Seleccione la instrucción y luego haga clic en Execute:
INSERTAR EN LOS CLIENTES
VALORES (0, 'No aplicable', 'No aplicable');
IR

3. En las instrucciones de Transact-SQL existentes, escriba la siguiente instrucción de Transact-SQL, selecciónela y luego haga
clic en Ejecutar:
ALTER TABLE Orders
DROP CONSTRAINT FK_Orders_Customers;
IR
ALTER TABLE Orders
ADD CONSTRAINT FK_Orders_Customers FOREIGN KEY (CustomerID)
REFERENCIAS Clientes (CustomerID) AL BORRAR SET SET DEFAULT;
IR

4. Seleccione la instrucción Transact-SQL que escribió en el paso 1 de la tarea anterior y luego haga clic en Ejecutar.
5. Revise los resultados y tenga en cuenta que el DELETE tuvo éxito.
6. En las instrucciones de Transact-SQL existentes, escriba la siguiente instrucción de Transact-SQL, selecciónela y luego haga
clic en Ejecutar:
SELECCIONAR * FROM Orders ;
IR

7. Revise los resultados y tenga en cuenta que OrderID 101 tiene un valor CustomerID de 0.
8. En las instrucciones de Transact-SQL existentes, escriba la siguiente instrucción de Transact-SQL, selecciónela y luego haga
clic en Ejecutar:
SELECT * FROM CustomerDetails;
IR

9. Revise los resultados y tenga en cuenta que se ha eliminado CustomerID 2.


10. En el menú Archivo, haga clic en Guardar SQLQuery2.sql.
11. En el cuadro de diálogo Guardar archivo como, busque D: \ Labfiles \ Lab04 \ Starter, en el cuadro Nombre de archivo,
escriba ImplementCascadingIntegrity y luego haga clic en Guardar.
https://translate.googleusercontent.com/translate_f 27/28
18/5/2018 https://translate.googleusercontent.com/translate_f

Cierre SQL Server Management Studio.

Revisión del módulo y comida para llevar


Jueves, 21 de abril de 2016
5:53 p.m.

Slide Image
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image017.png

Notas del instructor (TEXTO PPT)


Preguntas de revisión)

Pregunta

Piense en los pos de procesos que existen en su organización. ¿Qué en dades puedes iden ficar y qué pos de
relaciones existen entre ellas? Piense en tres o cuatro en dades específicas: ¿qué restricciones implementaría para
imponer la integridad referencial y u lizaría opciones como CASCADE o SET NULL?

Responder

Las respuestas variarán, dependiendo del conocimiento, las opiniones y la experiencia de los estudiantes.

Contenido del libro del alumno


<Agregar la revisión del módulo aquí>

Preguntas de revisión)

1. Piense en los tipos de procesos que existen en su organización. ¿Qué entidades puedes identificar y qué tipos de
relaciones existen entre ellas? Piense en tres o cuatro entidades específicas: ¿qué restricciones implementaría para
imponer la integridad referencial y utilizaría opciones como CASCADE o SET NULL?

https://translate.googleusercontent.com/translate_f 28/28

S-ar putea să vă placă și