Documente Academic
Documente Profesional
Documente Cultură
com/translate_f
imagen de diapositiva
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image001.png
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
• 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.
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
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?
Respondedor
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
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
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,
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
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.
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.
• 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.
imagen de diapositiva
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image005.png
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.
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
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.
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
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
• 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
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.
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
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.
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
https://translate.googleusercontent.com/translate_f 11/28
18/5/2018 https://translate.googleusercontent.com/translate_f
Slide Image
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image011.png
• 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
Slide Image
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image012.png
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.
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
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.
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
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.
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
Slide Image
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image015.png
Usted ha establecido que las siguientes reglas comerciales deben ser aplicadas:
• 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.
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.
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.
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
https://translate.googleusercontent.com/translate_f 18/28
18/5/2018 https://translate.googleusercontent.com/translate_f
You have established that the following business rules must be enforced:
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.
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:
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).
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
Resultados: después de completar este ejercicio, habrá identificado las claves necesarias para aplicar las reglas de integridad
referencial.
• 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.
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.
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'
OrderID = 106
ProductID = 44
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
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.
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.
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.
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
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?
¿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.
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.
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.
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).
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.
https://translate.googleusercontent.com/translate_f 24/28
18/5/2018 https://translate.googleusercontent.com/translate_f
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.
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
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.
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.
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
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
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.
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.
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
Slide Image
C: \ 683C9E65 \ 1338EFA9-149C-4750-AB85-
550C47D2B7F2_files \ image017.png
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.
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