base de datos ii - ecotec

29
UNIVERSIDAD TECNOLÓGICA ECO BASE DE DATOS II BASE DE DATOS II OTEC. ISO 9001:2008 1 Ing. César Bustamante Chong. M.Sc. DOCENTE UNIVERSIDAD ECOTEC

Upload: khangminh22

Post on 09-May-2023

1 views

Category:

Documents


0 download

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 ;