base de datos ii - ecotec
TRANSCRIPT
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
BASE DE DATOS IIBASE DE DATOS II
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
1Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
• AGENDAEntorno gráfico de SQL Server
� Modificar datos mediante: �Entorno Gráfico. �SQL: UPDATE
�Eliminar filas mediante: �Entorno Gráfico. �SQL: DELETE.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
2Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
�SQL: DELETE. �TRUNCATE
�Relacionar tablas. �Claves Extranjeras �Crear relaciones mediante código SQL�Crear relaciones hacia otras bases de datos mediante código SQL. �Crear diagramas de la base de datos
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server
� MODIFICAR DATOS EN LA TABLA� Cambia los datos de una tabla o vista de SQL Server� Puede usar las instrucciones UPDATE para modificar campos a una tabla de
las siguientes maneras:� Utilice la instrucción UPDATE para especificar valores directamente o� Desde una VISTA
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
3Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
� Desde una VISTA
�� EJEMPLOSEJEMPLOS� Usar una instrucción UPDATE simple
En el ejemplo siguiente se actualiza un solo valor de columna para todas las filas de la tabla Person.Address. USE AdventureWorks;GOUPDATE Person.AddressSET ModifiedDate = GETDATE();
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � MODIFICAR DATOS EN LA TABLA� Actualizar varias columnas
En el siguiente ejemplo se actualizan los valores de las columnas Bonus, CommissionPct y SalesQuota para todas las filas de la tabla SalesPerson.
USE AdventureWorks;
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
4Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
USE AdventureWorks;GOUPDATE Sales.SalesPersonSET Bonus = 6000,
CommissionPct = .10, SalesQuota = NULL;
GO
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � MODIFICAR DATOS EN LA TABLA� Usar la cláusula WHERE
En el ejemplo siguiente se utiliza la cláusula WHERE para especificar las filas que se van a actualizar. La instrucción actualiza el valor de la columna Color de la tabla Production.Product para todas las filas con un valor existente de 'Red' en la columna Color y con un valor que comience por 'Road-250' en la columna Name.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
5Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
comience por 'Road-250' en la columna Name.
USE AdventureWorks;GOUPDATE Production.ProductSET Color = N'Metallic Red'WHERE Name LIKE N'Road-250%' AND Color = N'Red';GO
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � MODIFICAR DATOS EN LA TABLA� Usar la cláusula TOP
En los siguientes ejemplos use la cláusula TOP para limitar el número de filas que se modifican en una instrucción UPDATE. Si debe usar TOP para aplicar actualizaciones por orden cronológico, debe utilizarla junto con ORDER BY en una instrucción de subselección. En el siguiente ejemplo se actualizan las horas de vacaciones de los 10
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
6Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
siguiente ejemplo se actualizan las horas de vacaciones de los 10 empleados cuyas fechas de alta son más antiguas. UPDATE HumanResources.EmployeeSET VacationHours = VacationHours + 8FROM (SELECT TOP 10 BusinessEntityID
FROM HumanResources.EmployeeORDER BY HireDate ASC) AS th
WHERE HumanResources.Employee.BusinessEntityID = th.BusinessEntityID;
GO
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � MODIFICAR DATOS EN LA TABLAUsar la cláusula WITH common_table_expressionEn el siguiente ejemplo se actualiza el valor PerAssemnblyQty para todas las partes y componentes que se utilizan directamente o indirectamente para crear el ProductAssemblyID 800. La expresión de tabla común devuelve una lista jerárquica de partes que se utilizan directamente para generar el ProductAssemblyID 800 y las partes que
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
7Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
utilizan directamente para generar el ProductAssemblyID 800 y las partes que se utilizan para generar esos componentes, etc. Solo se modifican las filas devueltas por la expresión de tabla común.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � MODIFICAR DATOS EN LA TABLA
USE AdventureWorks;GOWITH Parts(AssemblyID, ComponentID, PerAssemblyQty, EndDate, ComponentLevel) AS(
SELECT b.ProductAssemblyID, b.ComponentID, b.PerAssemblyQty,b.EndDate, 0 AS ComponentLevel
FROM Production.BillOfMaterials AS bWHERE b.ProductAssemblyID = 800
AND b.EndDate IS NULL
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
8Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
AND b.EndDate IS NULLUNION ALLSELECT bom.ProductAssemblyID, bom.ComponentID, p.PerAssemblyQty,
bom.EndDate, ComponentLevel + 1FROM Production.BillOfMaterials AS bom
INNER JOIN Parts AS pON bom.ProductAssemblyID = p.ComponentIDAND bom.EndDate IS NULL
)UPDATE Production.BillOfMaterialsSET PerAssemblyQty = c.PerAssemblyQty * 2FROM Production.BillOfMaterials AS cJOIN Parts AS d ON c.ProductAssemblyID = d.AssemblyIDWHERE d.ComponentLevel = 0;
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � MODIFICAR DATOS EN LA TABLAUsar la cláusula WHERE CURRENT OF
En el siguiente ejemplo se usa la cláusula WHERE CURRENT OF para actualizar solo la fila en la que se coloca el cursor. Cuando un cursor se basa en una combinación, solo se modifica el table_nameespecificado en la instrucción UPDATE. Las demás tablas que participan en el cursor no se ven afectadas.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
9Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
participan en el cursor no se ven afectadas. USE AdventureWorks;GODECLARE complex_cursor CURSOR FOR
SELECT a.BusinessEntityIDFROM HumanResources.EmployeePayHistory AS aWHERE RateChangeDate <>
(SELECT MAX (RateChangeDate)FROM HumanResources.EmployeePayHistory AS bWHERE a.BusinessEntityID = b.BusinessEntityID) ;
OPEN complex_cursor;FETCH FROM complex_cursor;
UPDATE HumanResources.EmployeePayHistorySET PayFrequency = 2 WHERE CURRENT OF complex_cursor;
CLOSE complex_cursor;DEALLOCATE complex_cursor;GO
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � MODIFICAR DATOS EN LA TABLAEstablecer valores de columnaEn los ejemplos de esta sección se muestra la actualización de columnas mediante valores calculados, subconsultas y valores DEFAULT. Especificar un valor calculado
En los siguientes ejemplos se usan valores calculados en una instrucción UPDATE. En el ejemplo se duplica el valor de la columna
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
10Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
instrucción UPDATE. En el ejemplo se duplica el valor de la columna ListPrice para todas las filas de la tabla Product.
USE AdventureWorks;GOUPDATE Production.Product
SET ListPrice = ListPrice * 2;GO
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � MODIFICAR DATOS EN LA TABLAEspecificar un operador compuesto
En el ejemplo siguiente se usa la variable @NewPrice para incrementar el precio de todas las bicicletas rojas, tomando como base el precio actual y sumándole 10.
USE AdventureWorks;GO
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
11Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
GODECLARE @NewPrice int = 10;UPDATE Production.Product
SET ListPrice += @NewPriceWHERE Color = N'Red';GO
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � MODIFICAR DATOS EN LA TABLAEn el siguiente ejemplo se usa el operador compuesto += para anexar los datos ' - tool malfunction' al valor existente de la columna Name de las filas que tienen un valor de ScrapReasonID comprendido entre 10 y 12.
USE AdventureWorks;GOUPDATE Production.ScrapReason
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
12Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
UPDATE Production.ScrapReasonSET Name += ' - tool malfunction'WHERE ScrapReasonID BETWEEN 10 and 12;
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � MODIFICAR DATOS EN LA TABLAEspecificar una subconsulta en la cláusula SETEn el siguiente ejemplo se usa una subconsulta en la cláusula SET para determinar el valor usado para actualizar la columna. La subconsulta debe devolver solo un valor escalar. Es decir, un solo valor por fila. En el ejemplo se modifica la columna SalesYTD de la tabla SalesPerson para reflejar las ventas más recientes registradas en la tabla SalesOrderHeader. La subconsulta suma
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
13Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
más recientes registradas en la tabla SalesOrderHeader. La subconsulta suma las ventas de cada vendedor en la instrucción UPDATE.
USE AdventureWorkS;GOUPDATE Sales.SalesPersonSET SalesYTD = SalesYTD +
(SELECT SUM(so.SubTotal) FROM Sales.SalesOrderHeader AS soWHERE so.OrderDate = (SELECT MAX (OrderDate)FROM Sales.SalesOrderHeader AS so2
WHERE so2.SalesPersonID = so.SalesPersonID)AND Sales.SalesPerson.BusinessEntityID = so.SalesPersonID
GROUP BY so.SalesPersonID);GO
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � MODIFICAR DATOS EN LA TABLA� Usar UPDATE en un procedimiento almacenadoEn el siguiente ejemplo se utiliza una instrucción UPDATE en un procedimiento almacenado. El procedimiento toma un parámetro de entrada @NewHours y un parámetro de salida @RowCount. El valor del parámetro @NewHours se utiliza en la instrucción UPDATE para actualizar la columna VacationHours de la tabla HumanResources.Employee. El parámetro de salida @RowCount se usa para
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
14Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
HumanResources.Employee. El parámetro de salida @RowCount se usa para devolver el número de filas afectadas a una variable local. La expresión CASE se utiliza en la cláusula SET para determinar el valor que está establecido para VacationHours condicionalmente. Cuando se paga al empleado por hora (SalariedFlag = 0), VacationHours se establece en el número actual de horas más el valor especificado en @NewHours; de lo contrario, VacationHours se establece en el valor especificado en @NewHours.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � MODIFICAR DATOS EN LA TABLA
USE AdventureWorks;GOCREATE PROCEDURE HumanResources.Update_VacationHours@NewHours smallintAS SET NOCOUNT ON;
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
15Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
UPDATE HumanResources.EmployeeSET VacationHours =
( CASEWHEN SalariedFlag = 0 THEN VacationHours + @NewHoursELSE @NewHours
END)
WHERE CurrentFlag = 1;GO
EXEC HumanResources.Update_VacationHours 40;
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � MODIFICAR DATOS EN LA TABLAUsar UPDATE en un bloque TRY…CATCHEn el siguiente ejemplo se usa una instrucción UPDATE en un bloque TRY…CATCH para administrar los errores de ejecución que se puedan producir durante una operación de actualización.
USE AdventureWorks;GOBEGIN TRANSACTION ;
IF @@TRANCOUNT > 0ROLLBACK
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
16Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
BEGIN TRANSACTION ;
BEGIN TRY-- Intentionally generate a constraint violation error.UPDATE HumanResources.DepartmentSET Name = N'MyNewName'WHERE DepartmentID BETWEEN 1 AND 2;
END TRYBEGIN CATCH
SELECT ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity,ERROR_STATE() AS ErrorState,ERROR_PROCEDURE() AS ErrorProcedure,ERROR_LINE() AS ErrorLine,ERROR_MESSAGE() AS ErrorMessage;
ROLLBACK TRANSACTION;END CATCH;
IF @@TRANCOUNT > 0COMMIT TRANSACTION;
GO
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server
� ELIMINAR DATOS EN LA TABLA� La instrucción DELETE quita una o varias filas de una tabla o vista. � A continuación se expone una forma simplificada de la sintaxis de DELETE:
DELETE table_or_viewFROM table_sources
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
17Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
FROM table_sourcesWHERE search_condition
�El parámetro table_or_view indica la tabla o vista de la que se van a eliminar las filas.�Se eliminarán todas las filas de table_or_view que reúnan los requisitos de la condición de búsqueda de la cláusula WHERE. �Si no se especifica ninguna cláusula WHERE, se eliminarán todas las filas de table_or_view.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server
� ELIMINAR DATOS EN LA TABLA�La cláusula FROM especifica tablas o vistas y condiciones de combinación adicionales que los predicados de la condición de búsqueda de la cláusula WHERE pueden utilizar para calificar las filas que se eliminarán de table_or_view.� Las filas no se eliminan de las tablas mencionadas en la cláusula FROM, sólo
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
18Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
� Las filas no se eliminan de las tablas mencionadas en la cláusula FROM, sólo de la tabla mencionada en table_or_view.�Las tablas de las que se quitan todas las filas permanecen en la base de datos. �La instrucción DELETE sólo elimina filas de la tabla, pero la tabla en sí se debe quitar de la base de datos mediante la instrucción DROP TABLE.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server
� ELIMINAR DATOS EN LA TABLA� En el ejemplo siguiente se eliminan todas las filas de la tabla
SalesPersonQuotaHistory porque no se utiliza una cláusula WHERE para limitar el número de filas eliminadas.
USE AdventureWorks;
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
19Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
USE AdventureWorks;GODELETE FROM Sales.SalesPersonQuotaHistory;GO
�En el ejemplo siguiente se eliminan todas las filas de la tabla ProductCostHistory en las que el valor de la columna StandardCost es superior a 1000.00.
USE AdventureWorks;GODELETE FROM Production.ProductCostHistoryWHERE StandardCost > 1000.00;GO
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � ELIMINAR DATOS EN LA TABLA� En este ejemplo se utiliza para eliminar registros de una tabla base que se
basa en una combinación o subconsulta correlacionada. � La primera instrucción DELETE muestra la solución de subconsulta y � La segunda instrucción DELETE muestra la extensión de Transact-SQL.� Ambas consultas quitan filas de la tabla SalesPersonQuotaHistory
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
20Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
� Ambas consultas quitan filas de la tabla SalesPersonQuotaHistorybasándose en las ventas del año hasta la fecha almacenadas en la tabla SalesPerson.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � ELIMINAR DATOS EN LA TABLA� PRIMERA.
USE AdventureWorks;GODELETE FROM Sales.SalesPersonQuotaHistoryWHERE BusinessEntityID IN
(SELECT BusinessEntityIDFROM Sales.SalesPerson
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
21Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
FROM Sales.SalesPersonWHERE SalesYTD > 2500000.00);
GO� SEGUNDA.
USE AdventureWorks;GODELETE FROM Sales.SalesPersonQuotaHistoryFROM Sales.SalesPersonQuotaHistory AS spqhINNER JOIN Sales.SalesPerson AS spON spqh.BusinessEntityID = sp.BusinessEntityIDWHERE sp.SalesYTD > 2500000.00;GO
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � TIPOS DE RELACIONES ENTRE TABLAS� El funcionamiento de una relación se basa en hacer coincidir datos de
columnas de clave, normalmente columnas que tienen el mismo nombre en ambas tablas.
� En la mayoría de los casos, la relación hace coincidir la clave principal de una tabla, que proporciona un identificador único para cada fila, con una entrada de la clave externa de la otra tabla.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
22Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
entrada de la clave externa de la otra tabla. � Por ejemplo, se pueden asociar las ventas de libros con los títulos
específicos vendidos creando una relación entre la columna title_id de la tabla titles (la clave principal) y la columna title_id de la tabla sales (la clave externa).
� Existen tres tipos de relaciones entre tablas. El tipo de relación creado depende de cómo se definen las columnas relacionadas.
�Relaciones uno a varios�Relaciones varios a varios�Relaciones uno a uno
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � TIPOS DE RELACIONES ENTRE TABLAS� Relaciones uno a varios� Las relaciones uno a varios son el tipo más habitual de relación. En este tipo
de relación, una fila de la tabla A puede corresponderse con muchas filas de la tabla B, pero una fila de la tabla B sólo puede corresponderse con otra de la tabla A.
� Por ejemplo, en las tablas publishers y titles se da una relación uno a varios:
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
23Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
� Por ejemplo, en las tablas publishers y titles se da una relación uno a varios: una editorial publica muchos títulos, pero a cada título le corresponde sólo una editorial.
� Cree una relación uno a varios si solamente una de las columnas relacionadas es la clave principal o tiene una restricción UNIQUE.
� El lado de la clave principal de una relación uno a varios se indica mediante un símbolo de clave. El lado de la clave externa de una relación se indica mediante un símbolo de infinito.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � TIPOS DE RELACIONES ENTRE TABLAS� Relaciones varios a varios� En una relación varios a varios, una fila de la tabla A puede tener muchas
filas coincidentes en la tabla B y viceversa. � Este tipo de relaciones se crea definiendo una tercera tabla, denominada
tabla de unión, cuya clave principal esté constituida por las claves externas de las tablas A y B.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
24Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
de las tablas A y B. � Por ejemplo, entre las tablas authors y titles existiría una relación varios a
varios definida por una relación uno a varios entre cada una de ellas y la tabla titleauthors. La clave principal de la tabla titleauthors es la combinación de la columna au_id (la clave principal de la tabla authors) y la columna title_id (la clave principal de la tabla titles).
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � TIPOS DE RELACIONES ENTRE TABLAS� Relaciones uno a uno� En una relación uno a uno, una fila de la tabla A no puede tener más de una
fila coincidente en la tabla B y viceversa. Se crea una relación uno a uno si las dos columnas relacionadas son claves principales o tienen restricciones UNIQUE.
� Este tipo de relación no es habitual, ya que la mayor parte de la información
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
25Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
� Este tipo de relación no es habitual, ya que la mayor parte de la información relacionada de esta manera estaría toda en una tabla.
� Puede utilizar una relación uno a uno para: �Dividir una tabla con muchas columnas.�Aislar parte de una tabla por razones de seguridad.�Almacenar datos que son efímeros y que pueden eliminarse fácilmente mediante la simple eliminación de la tabla.�Almacenar información que se aplica solamente a un subconjunto de la tabla principal.�El lado de la clave principal de una relación uno a uno se indica mediante un símbolo de clave. El lado de la clave externa también se indica mediante un símbolo de clave.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server �Cómo crear índices
1) Puede utilizar un índice para acelerar el acceso a datos de una tabla de base de datos. Para crear un índice, debe seleccionar una o más columnas de una tabla en que se desee realizar búsquedas. Podrá utilizar el índice cuando haya guardado la tabla.
2) Para crear un índice3) En el Explorador de objetos, haga clic con el botón secundario en la tabla para la que
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
26Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
3) En el Explorador de objetos, haga clic con el botón secundario en la tabla para la que desea crear un índice y, a continuación, haga clic en Diseño.
4) La tabla se abre en el Diseñador de tablas.5) En el menú Diseñador de tablas, haga clic en Índices o claves.6) En el cuadro de diálogo Índices o claves, haga clic en Agregar.7) Seleccione el nuevo índice en la lista Índice o clave Primary/Unique seleccionados y
configure las propiedades del índice en la cuadrícula de la derecha. 8) Especifique cualquier otro valor para el índice y haga clic en Cerrar.9) El índice se crea en la base de datos al guardar la tabla.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server � Con el Management Studio para crear una relación de clave externa en
el Diseñador de tablas1) En el Explorador de objetos, haga clic con el botón secundario en la tabla que va a estar en el lado de la clave
externa de la relación y, a continuación, haga clic en Diseño.2) La tabla se abre en el Diseñador de tablas.3) En el menú Diseñador de tablas, haga clic en Relaciones.4) En el cuadro de diálogo Relaciones de clave externa, haga clic en Agregar.5) La relación aparece en la lista Relación seleccionada con un nombre proporcionado por el sistema con el formato
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
27Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
FK_<tablename>_<tablename>, donde tablename es el nombre de la tabla de clave externa.6) Haga clic en la relación en la lista Relación seleccionada.7) Haga clic en Especificaciones de tablas y columnas en la cuadrícula situada a la derecha y, a continuación, haga
clic en los puntos suspensivos (...) que aparecen a la derecha de la propiedad.8) En el cuadro de diálogo Tablas y columnas, en la lista desplegable Clave principal, elija la tabla que estará en el
lado de la clave principal de la relación.9) En la cuadrícula situada debajo, elija las columnas que contribuyen a la clave principal de la tabla. En la celda de la
cuadrícula adyacente situada a la izquierda de cada columna, elija la columna de clave externa correspondiente de la tabla de clave externa.
10) El Diseñador de tablas sugerirá un nombre para la relación. Para cambiar este nombre, edite el contenido del cuadro de texto Nombre de la relación.
11) Elija Aceptar para crear la relación.
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server �Cómo crear índices en TRANSACT SQL
CREATE NONCLUSTERED INDEX [IX_Carros] ON [dbo].[Carros] (
[Modelo] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON,
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
28Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]GO
�Cómo crear índices foraneos en TRANSACT SQL
CREATE CONSTRAINT FK_SpecialOfferProduct_SalesOrderDetailFOREIGN KEY (ProductID, SpecialOfferID) REFERENCES SpecialOfferProduct (ProductID, SpecialOfferID)
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
Entorno gráfico de SQL Server �Cómo MODIFICAR índices en TRANSACT SQL
USE AdventureWorks; GO ALTER TABLE Production.TransactionHistoryArchive WITH NOCHECK ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionIDPRIMARY KEY CLUSTERED (TransactionID) WITH (FILLFACTOR = 75, ONLINE = ON, PAD_INDEX = ON);
UN
IVE
RS
IDA
D T
EC
NO
LÓG
ICA
EC
OT
EC
. ISO
9001:2008
29Ing. César Bustamante Chong. M.Sc.DOCENTE UNIVERSIDAD ECOTEC
WITH (FILLFACTOR = 75, ONLINE = ON, PAD_INDEX = ON); GO
�Cómo MODIFICAR índices foraneos en TRANSACT SQLUSE AdventureWorks; GO CREATE TABLE Person.ContactBackup (ContactID int) ; GOALTER TABLE Person.ContactBackupADD CONSTRAINT FK_ContactBacup_ContactFOREIGN KEY (ContactID) REFERENCES Person.Person (BusinessEntityID) ; ALTER TABLE Person.ContactBackupDROP CONSTRAINT FK_ContactBacup_Contact ; GODROP TABLE Person.ContactBackup ;