Esquemas de AdventureWorks

En la base de datos OLTP de ejemplo AdventureWorks, los objetos como las tablas, las vistas y los procedimientos se encuentran en esquemas. Los esquemas cambian la forma de tener acceso a dichos objetos. En este tema se ofrece una breve introducción a los esquemas, se describe cómo se utilizan en la base de datos AdventureWorks, y se proporcionan métodos y alternativas para tener acceso a los objetos que se encuentran en los esquemas.

Esquemas de AdventureWorks

En SQL Server 2005 y en versiones posteriores, los esquemas son independientes de los usuarios: como entidades de seguridad de la base de datos, los usuarios poseen esquemas y dichos esquemas contienen objetos. Para obtener más información, vea Separación de esquemas de usuario.

En la tabla siguiente se describen los esquemas que se utilizan en AdventureWorks y se enumeran las tablas representativas de cada esquema.

Esquema

Contiene objetos relacionados con

Ejemplos

HumanResources

Empleados de Adventure Works Cycles.

Tabla Employee

Tabla Department

Person

Nombres y direcciones de clientes individuales, proveedores y empleados.

Tabla Contact

Tabla Address

Tabla StateProvince

Production

Productos fabricados y vendidos por Adventure Works Cycles.

Tabla BillOfMaterials

Tabla Product

Tabla WorkOrder

Purchasing

Proveedores a los que se compran las piezas y los productos.

Tabla PurchaseOrderDetail

Tabla PurchaseOrderHeader

Tabla Vendor

Sales

Datos relacionados con los clientes y las ventas.

Tabla Customer

Tabla SalesOrderDetail

Tabla SalesOrderHeader

Obtener acceso a los objetos de los esquemas

Los usuarios siempre tienen un esquema predeterminado. El esquema predeterminado es el esquema en el que el servidor realiza la búsqueda cuando resuelve los nombres de los objetos no calificados que se especifican en una instrucción de DML o DDL. Por consiguiente, no es necesario especificar el esquema cuando se hace referencia a los objetos que se encuentran en el esquema predeterminado. Por ejemplo, la instrucción SELECT * FROM table_name se ejecuta correctamente si table_name se encuentra en el esquema predeterminado.

[!NOTA]

Si, al crear el usuario, no se especifica ningún esquema predeterminado, el esquema que se utiliza es dbo. Para obtener más información, vea CREATE USER (Transact-SQL).

Para obtener acceso a los objetos de un esquema que no sea el esquema predeterminado, se debe especificar como mínimo un identificador de dos partes (schema_name**.**object_name). Esto es válido para todas las instrucciones de DDL y DML que hacen referencia a los objetos con ámbito de esquema.

En el ejemplo siguiente se utilizan dos instrucciones SELECT para mostrar objetos de referencia externos al esquema. Suponiendo que el esquema predeterminado no es HumanResources, la primera instrucción no puede ejecutarse porque la tabla Department no se encuentra en el esquema predeterminado. La segunda instrucción se ejecuta correctamente porque especifica el esquema que contiene el objeto.

USE AdventureWorks;
GO
--This statement fails.
SELECT Name, GroupName
FROM Department;
GO
--This statement succeeds.
SELECT Name, GroupName
FROM HumanResources.Department;
GO

Alternativas a los esquemas en AdventureWorks

En los ejemplos de código de los Libros en pantalla de SQL Server y los ejemplos adicionales que se instalan con SQL Server se especifica como mínimo el identificador de dos partes para todos los objetos con ámbito de esquema. Dichos ejemplos pueden ejecutarse de forma correcta independientemente del esquema predeterminado del usuario.

Los usuarios que deseen utilizar AdventureWorks para sus propios ejemplos y pruebas, pueden utilizar una alternativa al identificador de dos partes. SQL Server proporciona scripts en SQLServerEngineSamples.msi que ofrecen dos alternativas al uso de los esquemas de AdventureWorks.

Transferir objetos al esquema DBO

El script AlterSchemaToDbo.sql transfiere cada uno de los objetos con ámbito de esquema de AdventureWorks al esquema dbo. Una vez que se haya ejecutado este script, los usuarios con un esquema predeterminado de dbo no tienen que utilizar por necesidad el identificador de dos partes para hacer referencia a los objetos de AdventureWorks en las instrucciones de DDL y DML.

Nota importanteImportante

Los ejemplos de código y otros ejemplos que se proporcionan con SQL Server no se ejecutarán después de ejecutar AlterSchemaToDbo.sql a menos que los nombres de esquema especificados en el código se sustituyan por dbo o se eliminen.

El script AlterSchemaFromDbo.sql transfiere, o devuelve, los objetos del esquema dbo a los esquemas en los que se encontraban antes de ejecutar el script AlterSchemaToDbo.sql.

Usar sinónimos

Un sinónimo es otro nombre que se asigna a un objeto con ámbito de esquema. El sinónimo se especifica en lugar del objeto base en las instrucciones de DDL y DML.

El script CreateSynonymsDbo.sql crea un sinónimo para cada objeto con ámbito de esquema de AdventureWorks. El sinónimo coincide con el nombre del objeto base, pero utiliza el esquema dbo. Por ejemplo, el sinónimo para HumanResources.Department es dbo.Department. Esto presenta las ventajas siguientes:

  • Si dbo es el esquema predeterminado, no es necesario especificar un identificador de dos partes para especificar estos objetos en las instrucciones de DDL y DML.

  • Los ejemplos de código y otros ejemplos que se proporcionan con SQL Server pueden utilizarse sin realizar ninguna modificación.

El script DropSynonymsDbo.sql quita los sinónimos creados por el script CreateSynonymsDbo.sql. Para obtener más información sobre los sinónimos, vea Usar sinónimos.