Vous êtes sur la page 1sur 71

TECNOLGICO NACIONAL DE MXICO

Instituto Tecnolgico Superior de Guasave


Ingeniera en Sistemas Computacionales
Unidad II: Lenguaje de Definicin de Datos
DDL
Mtro. Jos Antonio Sandoval Acosta
itsg.jsandoval@gmail.com

TALLER DE BASE DE DATOS

TALLER DE BASE DE DATOS

Competencia: Implementar esquemas de bases de


datos a travs de SQL en un SGBD.

TALLER DE BASE DE DATOS


Diseo de bases de datos en SQL Server
Una base de datos es un contenedor de todos los objetos que
SQL puede manejar en un ambiente relacional.
Antes de iniciar con la creacin y diseo de bases de datos
debemos entender el sistema de BD que es instalado por default
con SQL Server, cada una de las siguientes bases de datos tienen
un propsito especfico y es requerida por SQL Server:
master
tempdb
model
resource
distribution

LeBlanc, 2013

TALLER DE BASE DE DATOS


master database
La base de datos master como su nombre lo indica es
la base de datos del sistema, sin esta, SQL Server no
puede funcionar, esta contiene la informacin sobre
objetos del SQL tales como:
Base de datos
Mirroring
Configuraciones
Logins
Etc.

LeBlanc, 2013

TALLER DE BASE DE DATOS


tempdb database
La base de datos tempdb sirve para realizar todas las
actividades temporales de los objetos que corren en
SQL Server y que son creados por las aplicaciones de
los usuarios. Un asunto importante sobre esta DB es
que se crea desde cero cada vez que SQL es reiniciado,
si bien pueden ser craados objetos dentro de esta DB,
no es prudente usarla como medio de transacciones
debido a su volatilidad al reinicio.

LeBlanc, 2013

TALLER DE BASE DE DATOS


model database
La BD model sirve para guardar el modelo de todas
las DB que son creadas en una instancia de SQL Server,
es decir sirve como template cada vez que creamos
una DB nueva.

LeBlanc, 2013

TALLER DE BASE DE DATOS


msdb database
La DB msdb guarda informacin acerca de los siguientes
componentes :
Service brokers
Alerts
Log shipping
SSIS packages
Utility control point (UCP)
Database mail
Maintenance plans

LeBlanc, 2013

TALLER DE BASE DE DATOS


resource database
La DB resource permanece oculta y es solo lectura,
es poco utilizada y su principal propsito es mejorar el
proceso de actualizacin de una versin de SQL Server
a otra ms reciente. Esta DB no puede ser respaldada o
restaurada, y no debe alterarse su contenido de forma
manual en ningn momento.

LeBlanc, 2013

TALLER DE BASE DE DATOS


distribution database
La DB distribution existe nicamente cuando se ha
configurado una instancia de SQL Serer como
distribuidor de replicaciones, en este caso el tema de
replicacin se ver mas adelante.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Vista general de las DB del Sistema de SQL Server.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Estructura de las Bases de Datos en SQL Server
Cada DB en SQL Server contiene dos archivos
de datos:
Un Data File que contiene todos los objetos
de
la
BD
como
tablas,
vistas,
procedimientos almacenados, etc.
Un Log File que contiene informacin que
sirve para recuperar transacciones en la DB.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Como Crear una Base de Datos
Cuando creamos una DB el archivo de
datos es creado con todas las
definiciones que el usuario ha dado.
Antes de correr el script, crearemos
dos carpetas en el disco C: con
SQLData y SQLLog:
Abrir SSMS
Abrir el explorador de objetos y dar
click en la flecha de nuestro
servidor
Click

derecho

en

la

carpeta

LeBlanc, 2013

TALLER DE BASE DE DATOS


En el cuadro de dialogo
seleccionar la opcion General
En el nombre de la DB teclear
DBPrueba
En la seccion de archivos en la
columna
Path
teclear
c:\SQLData para datos y
c:\SQLLog
para
log
de
cambios
En la seccion File Name
teclear DBPrueba para datos
y DBPrueba_log para log de

LeBlanc, 2013

TALLER DE BASE DE DATOS


En este momento ya podemos utilizar la herramienta Query
Editor para aplicar nuestro script y crear la base de datos,
utlizaremos el siguiente cdigo:
USE master;
CREATE DATABASE SBSChp4TSQL
ON PRIMARY(NAME='SBSChp4TSQL1', FILENAME =
'C:\SQLDATA\SBSTSQL1.mdf', SIZE=10MB, MAXSIZE=20,
FILEGROWTH=10%)
LOG
ON(NAME='SBSChp4TSQL_log',
FILENAME
=
'C:\SQLLog\SBSTSQL_log.ldf',
SIZE=10MB,
MAXSIZE=200,
FILEGROWTH=20%);

LeBlanc, 2013

TALLER DE BASE DE DATOS


.

LeBlanc, 2013

TALLER DE BASE DE DATOS


El script que aplicamos contiene varios parmetros importantes, por ejemplo,
coloca la base de datos en una carpeta especfica, y la misma crecer bajo
una tasa muy especfica. A continuacin se listan los parmetros ms
importantes:
database_name: nombre de la DB, debe ser un dato nico.
ON: especifica el grupo de archivos e inicia la seccin donde el archivo de
datos es definido .
Name: es el nombre lgico del archivo y debe ser nico.
FileName: es la ruta del sistema operativo y el nombre, as como la
extensin.
Size: especifica el tamao inicial en MB por default. Tambin es posible
especificar tamao en KB, GB y TB.
Filegrowth: especifica el crecimiento del archivo en MB pero tambin
puede especificarse en un porcentaje fijo.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Agregar Archivos y Grupos de Archivos a la BD
Adems de poder agregar objetos al archivo primario de
la BD, tambin tenemos la posibilidad de agregar otros
archivos y grupos de archivos a nuestra base de datos,
estos archivos se reconocen por su extensin, que es
.ndf, los archivos de datos secundarios se utilizan
generalmente para agregar mayor espacio a la base de
datos en el supuesto que el archivo principal alcance su
lmite.

Tambin es recomendable agrupar los archivos, cuando


la DB es creada el grupo de archivos principal contiene
el archivo de datos principal que se crea por default. LeBlanc, 2013

TALLER DE BASE DE DATOS


En la imagen podemos ver
dos filegroups o grupos de
archivos
El grupo de archivos primario
contiene el archivo primario de
datos.
El grupo de archivos secundario
contiene
dos
archivos
secundarios de datos.
Y finalmente el archivo de log
de cambios.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Como agregar archivos y grupos
de archivos por medio de SSMS
Abrir SSMS
Abrir el explorador de objetos y dar
click en la flecha de nuestro servidor
Click derecho en la DB DBPrueba y
seleccionar Properties
Seleccionar Filegroups en lista de
Select a Page
Click en el botn Add
En el rengln que se abre teclear en
la columna Name DBpruebaFG
En la columna Default palomear el
checkbox

LeBlanc, 2013

TALLER DE BASE DE DATOS


En la izquierda del panel seleccionar Files y maximizar el
cuadro de dialogo.
Click en Add
En el rengln nuevo en la columna Logical Name teclear
DBPruebaF1
En la columna Filegroup seleccionar DBpruebaFG
En la columna Path buscar la ruta C:\SQLData
En la collumna File Name teclear DBPruebaF1.ndf
Click en Aceptar.
Revisamos la ruta que exista el archivo

LeBlanc, 2013

TALLER DE BASE DE DATOS


.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Agregar Archivos y grupos de archivos por medio de Query Editor:
Abrir Query Editor en SSMS
Teclear el siguiente cdigo

USE master;
ALTER DATABASE SBSChp4TSQL Add FILEGROUP SBSTSQLGroup1;
ALTER DATABASE SBSChp4TSQL Add File (
NAME='SBSChp4TSQL2', FILENAME = 'C:\SQLDATA\SBSTSQL2.ndf',
SIZE=10MB, MAXSIZE=20, FILEGROWTH=10% )
TO FILEGROUP SBSTSQLGroup1;

LeBlanc, 2013

TALLER DE BASE DE DATOS


Query al ser
ejecutado
en el Query
Editor de
SSMS

Revisamos en el
Explorador de
Windows que el
archivo haya sido
creado

LeBlanc, 2013

TALLER DE BASE DE DATOS


Separar y Adjuntar DBs en SQL Server
(Detch y Attach)
Que es lo que sucede si por alguna razn es necesario
quitar una DB de una instancia y trasladarla a otra
instancia de SQL ya sea en el mismo servidor o en otro
ubicado en otro sitio. En estos casos es posible utilizar
SSMS o bien T-SQL Queries.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Pasos para separar una DB por medio de SSMS
Abrir SSMS
Expandir explorador de objetos y el
nodo del servidor correspondiente
Expandir la carpeta
correspondiente

de

la

DB

Click derecho en SBSChp4TSQL


Seleccionar Task/Detach
En el cuadro de dialogo palomear los
checkboxes de Drop Connections
y Update Statistics.
Click OK

LeBlanc, 2013

TALLER DE BASE DE DATOS


En este momento la DB SBSChp4TSQL ya no aparece en la lista del
Explorador de objetos del SSMS, pero en la carpeta de datos del SQL
(C:\SQLData) el archivo SBSTSQL1.mdf se encuentra listo para ser
trasladado al servidor que sea requerido. En este caso lo volveremos a
adjuntar a nuestra instancia de SQL server.
Abrir SMMS
Abrir Explorador de Objetos y expandir el nodo del servidor requerido
Click derecho en la carpeta Databases
Clcik Attach y aparecer el dialogo correspondiente, click en Add
Aparece un nuevo dialogo, expandir la carpeta del disco C:
Localizar y expandir la carpeta C:\SQLData y seleccionar el
archivo .MDF correspondiente, en este caso es SBSTSQL1.mdf

Click OK, al finalizar el proceso la DB aparecer en el Explorador de


objetos de nuevo
LeBlanc, 2013

TALLER DE BASE DE DATOS


.

LeBlanc, 2013

TALLER DE BASE DE DATOS


El proceso de Separar y Adjuntar por medio del Query
Editor es ms sencillo, seguir los siguientes pasos
Separar (Detach):
Abrir SMSS y abrir un nueva ventana de Queries
Teclear y ejecutar el siguiente script:
USE Master;
EXEC sp_detach_db @dbname = 'SBSChp4TSQL';

LeBlanc, 2013

TALLER DE BASE DE DATOS


Adjuntar (Attach):
Abrir SMSS y abrir un nueva ventana de Queries
Teclear y ejecutar el siguiente script:
USE master;
CREATE DATABASE SBSChp4TSQL ON
(FILENAME = 'C:\SQLData\SBSTSQL1.mdf'),
(FILENAME = 'C:\SQLData\SBSTSQL2.ndf'),
(FILENAME = 'C:\SQLLog\SBSTSQL_Log.ldf')
FOR ATTACH;

LeBlanc, 2013

TALLER DE BASE DE DATOS


Creacin de tablas en SQL Server
Antes de iniciar con la creacin de tablas y otros objetos
de la DB es importante apegarnos a un estndar de
desarrollo, esto no es un requisito, sin embargo no
apegarnos a un estndar puede implicar problemas
para los desarrolladores al momento de acceder a la
informacin contenida en la DB.
A continuacin se listan algunas de las prcticas a las
que podemos apegarnos para tener un mejor resultado al
momento de generar los nombres de los objetos que
forman nuestra DB:

LeBlanc, 2013

TALLER DE BASE DE DATOS


Estndares Generales:
No utilizar espacios en blanco en los nombres de
objetos o columnas
El carcter de subrayado es aceptable en los nombres
pero no el guin medio ya que se puede confundir con
el signo de resta.
Es recomendable usar PascalCase, es decir, utilizar
como mayscula la primera letra de cada palabra que
forma el nombre de un objeto.
No utilizar palabras reservadas del SQL Server.

Las palabras en singular tienen preferencia sobre LeBlanc,


los 2013

TALLER DE BASE DE DATOS


Estndares para los nombres de Tablas:
Los nombres deben referirse claramente al contexto de
la tabla en cuestin sin dejar cabida a la ambigedad.
Los nombres deben ser nicos en la DB (no repetirlos en
columnas, tablas, vistas, SP, etc.).

LeBlanc, 2013

TALLER DE BASE DE DATOS


Estndares para los nombres de columnas:
Los nombres deben ser nicos en cada tabla
Los nombres deben contextualizarse en uso y propsito
de la columna
Se debe utilizar el tipo de dato correcto para cada
columna (no confundir entero con flotantes, etc.)

LeBlanc, 2013

TALLER DE BASE DE DATOS


Tipos de Datos en SQL Server
SQL Server tiene 4 tipos de datos distintos, que se muestran en la
siguiente figura:

Cada tipo de datos tiene subcategoras, todas las columnas en una tabla,
variables y parmetros deben estar relacionados a un tipo de dato. La
integridad de la DB depende en gran medida de que sean seleccionados
los tipos de datos apropiados para cada objeto.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Tipos de datos Numricos
Estos tienen dos subcategorias, exact y approximate

Debemos seleccionar el tipo de dato adecuado para cada


columna de nuestras tablas
LeBlanc, 2013

TALLER DE BASE DE DATOS


As mismo, la categora de nmeros exactos
esta dividida en dos subcategoras, decimal
y numeric. Teniendo dos caractersticas
bsicas, precisin y escala. Precisin es el
total de dgitos que se pueden almacenar en
ambos lados del punto decimal, y puede ser
un valor entre 1 y 38. Escala es la cantidad
de dgitos que se pueden almacenar a la
derecha del punto decimal. Este valor est
entre cero y la precisin asignada. +
Por ejemplo; si deseas crear una variable que
almacene un total de 4 dgitos de los cuales 2
son decimales debes utilizar una instruccin
como esta: decimal(4,2).

LeBlanc, 2013

TALLER DE BASE DE DATOS


Tipos de dato String
El tipo de dato String est formado por 3 subcategoras:
character, Unicode y binary. El almacenamiento mximo
que se puede lograr es de 2 GB. Cada subcategora se
divide en 3 subcategoras.
Categora character (guarda datos no-unicode):
char(n): puede almacenar entre 1 y 8000 caractres.
varchar(n): puede almacenar hasta 2 GB.
text: tipo obsoleto, fue sustituido por varchar().

LeBlanc, 2013

TALLER DE BASE DE DATOS


Categora Unicode (guarda datos tipo unicode y nounicode):
nchar(n): puede almacenar entre 1 y 4000 caractres.
nvarchar(n): puede almacenar hasta 2 GB.
ntext: tipo obsoleto, fue sustituido por nvarchar().
Categora binary string (guarda datos tipo binario):
binary(n): puede
caractres.

almacenar

entre

8000

varbinary(n): puede almacenar hasta 2 GB.

image: tipo obsoleto, fue sustituido por varbinary().LeBlanc, 2013

TALLER DE BASE DE DATOS


Tipos de datos Date y Time
Existen 6 tipos de datos en esta categora, los cuales pueden
almacenar datos en diferentes formatos:
time(n): Almacena la hora sin tomar en cuenta zona horaria,
basado en 24 horas. Acepta un argumento sobre fraccin de
segundos.
date: Almacena fechas entre el 01-01-01 y 12-31-9999.
Smalldatetime: Almacena fecha y hora, la fecha
comprendida entre 01/01/1900 y 06/06/2079, y la hora con
precisin en segundos.

LeBlanc, 2013

TALLER DE BASE DE DATOS


datetime: similar a smalldatetime pero con mayor
rango de precisin, almacena fechas entre 01-01-01 y
12-31-9999; y horas incluyendo milsimas de segundos;
ejemplo: 04/01/2012 11:15:04:888
datetime2(n): similar a datetime pero con mayor
precisin en las milesimas de segundo, se puede
especificar entre 0 y 7 en el parmetro correspondiente.

datetimeoffset: este tipo de dato contiene todas las


funcionalidades del datetime2 pero con control sobre la
zona horaria; por ejemplo: el valor 04/01/2012
03:10:24 -06:00 incluye la zona horaria y es aceptable
para este tipo de dato.
LeBlanc, 2013

TALLER DE BASE DE DATOS


Otros tipos
de datos
Adems de
los ya
mencionad
os, SQL
Server
incluye
otros tipos
de datos
los cuales
se

LeBlanc, 2013

TALLER DE BASE DE DATOS


Creacin de tablas y columnas en la DB
Una base de datos est compuesta por tablas, que a su vez
contienen columnas, estas en conjunto forman los renglones
de la tabla, los cuales contienen registros independientes
con informacin muy especfica.
La propiedad ms comn en una columna es Allow nulls, la
cual permite insertar renglones en la tabla sin integrar un
valor especfico para una columna en particular. Null no
significa cadena vacia, sino la ausencia de un valor. As
mismo, un valor null no es igual a otro valor null.
Para este primer ejercicio usaremos SSMS.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Para crear la tabla utilizaremos la infromacin contenida
en la siguiente tabla:

LeBlanc, 2013

TALLER DE BASE DE DATOS


Procedimiento para crear una nueva tabla en SSMS
Abrimos SSMS
Expander la carpeta Databases / DBPrueba
Expander la carpeta Security
Click derecho en Schemas y seleccionar New Schema
En el cuadro de dialogo: teclear HumanResources en el campo
Name y teclear dbo en el campo Owner.
Click OK.
Click derecho en la carpeta Tables y se abre el Table Designer.
Seleccionar New Table en el men.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Una vez que tenemos abierto el
Table
Designer
podemos
comenzar a capturar los campos
que vimos en la tabla anterior con
las
caractersticas
correspondientes

LeBlanc, 2013

TALLER DE BASE DE DATOS


Hasta ahora no hemos dado nombre a la nueva tabla, a la derecha
de la pantalla est la ventana properties (en caso de no estar
visible activarla en el men view/properties window).
En el primer campo (Name) tecleamos el nombre de la tabla que
es Address.
Localizamos
el
campo
Schema
y
seleccionamos
HumanResources.
Expander Regular Data Space Specification y en la propiedad
Filegroup or partition seleccionar DBPruebaFG.
Click en el botn de Grabar Todo.
La tabla ha sido generada y ahora es visible en la carpeta Tables
de la DB.

LeBlanc, 2013

TALLER DE BASE DE DATOS

LeBlanc, 2013

TALLER DE BASE DE DATOS


Instrucciones para crear la tabla por medio de un script en
T-SQL y Query Editor
USE DBPrueba;
CREATE TABLE HumanResources.Address (
AddressID int NOT NULL IDENTITY(1,1),
StreetAddress varchar(125) NOT NULL,
StreetAddress2 varchar(75) NULL,
City varchar(100) NOT NULL,
State char(2) NOT NULL,
EmployeeID int NOT NULL )
ON [DBPruebaFG];

LeBlanc, 2013

TALLER DE BASE DE DATOS


Modificacin de Tablas
As como creamos la tabla Address tanto en SSMS y TSQL tambin es posible modificar las tablas, agregar
nuevos campos, cambiar el tipo de dato que contienen
los campos y eliminar campos que ya no son
requeridos.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Procedimiento para modificar tablas en SSMS
Abrir SSMS y conectar al servidor correspondiente
Expandir la carpeta Databases y la DB DBPrueba, as como la
carpeta Tables
Click derecho en la tabla HumanResources.Employee y seleccionar
Design
Teclear el nuevo campo Gender en el nuevo rengln, tipo char(1), y
aceptar datos nulos.
Grabar todo.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Como Crear Computed Columns en la
Tabla
Un campo computed o campo calculado es aquel que
utliza una frula para insertar su valor y por lo general
no requiere ser capturado por el usuario. Esto es algo
muy fcil de conseguir utlizando SSMS ya que la
pantalla de properties proporciona las herramientas
necesarias.

Realizar el siguiente ejericicio:


Abrir SSMS y conectar al servidor correspondiente
Expandir la carpeta Databases y la DB DBPrueba, as
LeBlanc, 2013

TALLER DE BASE DE DATOS


Debajo del campo Gender, teclear el campo
FirstName, tipo nchar(25); el campo LastName,
tipo nchar(25); y finalmente el campo FullName,
tipo nchar (50); en todos permitir nulos.
Una vez creado el campo FullName en la parte
inferior de nuestra ventana se encuentra el
dialogo de Column Properties en el buscamos la
propiedad Computed Column Specification y en
la propiedad (Formula) tecleamos:
LastName+', '+FirstName
Guardamos todo
Con esto el campo FullName se actualizar por si
solo cada vez las columnas FirstName y
LastName del rengln correspondiente sean
modificadas.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Ejemplo de como crear un campo Computed
por medio de un query:
USE DBPrueba;
ALTER TABLE HumanResources.Employee
ADD FullName AS LastName+', '+FirstName;

LeBlanc, 2013

TALLER DE BASE DE DATOS


Agregar Reglas de Restriccin a las Tablas
(Constraints)
El objetivo principal de los constraints es asegurar la
integridad de la informacin en la DB, mejorando la validacin
y consistencia de los datos.
Primary Key Constraints

Un Primary Key es un campo o columna de una tabla que


contiene una lista de datos nica. Es posible crear Primary
LeBlanc, 2013
Key con casi cualquier columna o conjunto de columnas

TALLER DE BASE DE DATOS


Otros tipos de constraints:
Default Constraints: Son utilizados cuando se posee una
columna en la tabla que guarda valores especficos por cada
rengln de la misma. Un campo que guarda valores falso o
verdadero es un buen ejemplo.
Unique Constraints: Estos sirven para asegurarse que no
se inserten valores repetidos por columna por lo que no
deben ser confundidos con un Primary Key, el cual puede ser
un conjunto de columnas. El numero de Seguro Social es un
ejemplo de este tipo de constraint.
Check Constraints: Estos permiten valorar la informacin

LeBlanc, 2013

TALLER DE BASE DE DATOS


Para continuar con la prctica debemos ejecutar el siguiente
script en Query Editor:
USE DBPrueba;
ALTER TABLE HumanResources.Address
ADD Active bit NOT NULL;
ALTER TABLE HumanResources.Address
ADD SocialSecurityNumber varchar(10) NOT NULL;
Una vez ejecutado el query, abrimos el SSMS y utlizaremos
DBPrueba

LeBlanc, 2013

TALLER DE BASE DE DATOS


Seleccionamos la carpeta Tables
HumanResources.Address.

la

tabla

Click derecho en el campo EmployeeID y


seleccionamos en el men la opcion Set Primary
Key.
Seleccionar la columna Active, en la ventana de
propiedades de la columna buscar Default Value y
teclear 1 como valor predeterminado.
En la barra de men click en el icono de Manage
indexes and keys.
Aparecer la ventana de Indexes/Keys, click en el
botn Add, en la propiedad Name teclear
UQ_Employee_SSN y en la propiedad Unique
teclear Yes.

LeBlanc, 2013

TALLER DE BASE DE DATOS


En el explorador de objetos expandir
la
tabla
HumanResources.Address,
click
derecho en columna Constraints y
seleccionar New Constraint.
En la propiedad Name teclear
CK_Employee_Gender_MF.
Buscar la propiedad Expression y
click en el boton de la derecha,
teclear la expresion ([Gender] =
'Female' OR [Gender] = 'Male')
Click en Ok
Guardar todo.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Ejemplo de instrucciones para realizar los cambios por medio
de Query Editor:
USE DBPrueba;
ALTER TABLE HumanResources.Address
ADD CONSTRAINT PK_HumanResourcesEmployee_EmployeeID
PRIMARY KEY (EmployeeID);
ALTER TABLE HumanResources.Address
ADD CONSTRAINT DF_HumanResourcesEmployee_Active_True
DEFAULT(1) FOR Active;
ALTER TABLE HumanResources.Address
ADD CONSTRAINT UQ_HumanResourcesEmployee_SocialSecurityNumber
UNIQUE (SocialSecurityNumber);

LeBlanc, 2013

TALLER DE BASE DE DATOS


Foreign Key
Un ltimo tipo de Constraint es el Foreign Key, este juega un rol de gran
importancia en para mantener la integridad de la informacin dela DB. Como
pudimos ver el campo EmployeeID se encuentra en la tabla Address, sin
embargo, no hemos declarado una tabla que sirva para guardar la
informacin personal de cada empleado como corresponde bajo las reglas de
las formas normales de una DB. Para ello utilizaremos el siguiente query:
use dbprueba;
CREATE TABLE HumanResources.Employee (
EmployeeID int NOT NULL IDENTITY(1,1),
FirstName varchar(50) NOT NULL,
MiddleName varchar(50) NULL,
LastName varchar(50) NOT NULL
) ON [dbpruebafg];

LeBlanc, 2013

TALLER DE BASE DE DATOS


En la tabla recin creada HumanResources.Employee tenemos el campo
EmployeeID que es exactamente igual al campo EmployeeID que tiene la
tabla HumanResources.Address. Regularmente cuando deseamos insertar
nuevos registros en la tabla Address primero revisamos que el nmero de
empleado exista en la tabla Employee, esto lo hacemos por medio de cdigo
de programacin.
La particularidad de un Foreign Key es que puede hacer esta validacin y
asegurar que solo nmeros de empleado vlidos sean insertados en la tabla
Address sin necesidad de usar cdigo de programacin.
Antes de continuar ejecutar el siguiente script:
USE DBPrueba
ALTER TABLE HumanResources.Address DROP PK_Address
ALTER TABLE HumanResources.Address
ADD CONSTRAINT PK_HumanResourcesAddress_AddressID
PRIMARY KEY (AddressID);

LeBlanc, 2013

TALLER DE BASE DE DATOS


Seleccionar EmployeeID en el combobox que aparece
justo debajo
En la lista de FK Table seleccionar EmployeeID
Click Ok/Close/Save all/ y si aparece ventana de
confirmacin aceptar

LeBlanc, 2013

TALLER DE BASE DE DATOS


En el query anterior eliminamos el PK que tenia la tabla y creamos uno
nuevo, esto es debido a que solo se puede tener un PK por tabla, y
adems un FK solo puede ser declarado en la tabla donde el campo en
cuestin no es PK. Seguir las Instricciones:
Abrir SSMS y expandir
Databases/DBPrueba/Tables/HumanResources.Addres
Click derecho en la carpeta Keys y seleccionar New Foreign Key
Aparecer el cuadro de dialogo Foreign Key Relationships, en la
propiedad (Name) teclear el valor
FK_Employee_To_Address_On_EmployeeID.
Click en Table and Columns Specification y click en el boton que
aparece
En el cuadro de dialogo que aparece seleccionar Employee como PK
Table.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Creacin y Mantenimiento de ndices
Un ndice es objeto de la DB basado en tablas y, vistas y sirven para
hacer ms rpida la bsqueda y recuperacin de la informacin
almacenada en la DB.
Se debe ser cuidadoso al crear los ndices ya que sobrecargar la DB con
muchos ndices puede resultar contraproducente y afectar el
desempeo de la DB al momento de insertar, modificar y recuperar
informacin.
Los ndices son creados sobre una columna o grupo de columnas de
una tabla.
Los ndices se crean automticamente cuando los constraints PRIMARY
KEY y UNIQUE se definen en las columnas de tabla.

LeBlanc, 2013

TALLER DE BASE DE DATOS


Los ndices pueden ser clasificados en dos tipos bsicos: Clostered y
Nonclostered. El propsito de ambos tipos es mejorar como el motor de
(LeBlanc, 2013)
base de datos de SQL Server accede a la informacin.
Clostered: Los ndices agrupados o clostered ordenan y almacenan los
registros de una tabla o vista basndose en los valores de su campo clave
(un campo de ID por ejemplo).Son campos (o columnas) incluidos en la
definicin del ndice.Solo puede haber un ndice clster por cada tabla,
porque las filas de datos solo pueden estar ordenadas de una forma.
La nica manera en que los registros de una tabla o vista estn
almacenados de forma ordenada es cuando contiene un ndice
agrupado.Cuando una tabla tiene un ndice agrupado, la tabla se
denominatabla agrupada.Si una tabla no tiene un ndice clster, sus filas
de datos estn almacenadas en una estructura sin ordenar denominada
montn.

https://msdn.microsoft.com. 201

TALLER DE BASE DE DATOS


Nonclostered: Los ndices no agrupados tienen una estructura aparte
de la de los registros de una tabla.Un ndice no clster contiene los
valores de clave de ndice no clster y cada entrada de valor de clave
tiene un puntero a la fila de datos que contiene el valor clave.
El puntero de una fila de ndice no clster hacia una fila de datos se
denomina localizador de fila.La estructura del localizador de filas
depende de si las pginas de datos estn almacenadas en un montn
o en una tabla agrupada.Si estn en un montn, el localizador de filas
es un puntero hacia la fila.Si estn en una tabla agrupada, el
localizador de fila es la clave de ndice clster.
Puede agregar columnas sin clave al nivel hoja de un ndice no clster
con el fin de eludir los lmites existentes para las claves de ndice, 900
bytes y 16 columnas de clave, as como para ejecutar consultas
indizadas y totalmente cubiertas.

https://msdn.microsoft.com. 201

TALLER DE BASE DE DATOS


Como Crear un Nonclosterd
Index
Insertar en la tabla Employee un nuevo
campo SSN, char(11);
Abrir SSMS y expandir
Databases/DBPrueba/Tables/Employee/In
dexes
Click derecho en la carpeta Indexes y
seleccionar New Index/Nonclostered
Index
En el cuadro de dialogo teclear en el
campo Name ID_SSN, y palomear la
casilla Unique

LeBlanc, 2013

TALLER DE BASE DE DATOS

LeBlanc, 2013

TALLER DE BASE DE DATOS


Eliminacin y modificacin de objetos en la DB
DROP TABLE (T-SQL): Quita una o varias definiciones de tabla y todos
los datos, ndices, desencadenadores, restricciones y especificaciones
de permisos de esas tablas.

Sintaxis:
DROP TABLE [ database_name . [ schema_name ] . | schema_name . ]
table_name [ ,...n ] [ ; ]
Nota: No se puede utilizar DROP TABLE para quitar una tabla a la que
haga referencia una restriccin FOREIGN KEY.Primero se debe quitar la
restriccin FOREIGN KEY o la tabla de referencia.Si la tabla de referencia
y la tabla que tiene la clave principal se van a quitar en la misma
instruccin DROP TABLE, la tabla de referencia debe aparecer primero

https://msdn.microsoft.com. 201

TALLER DE BASE DE DATOS


ALTER TABLE (T-SQL): Modifica una definicin de tabla al alterar, agregar o
quitar columnas y restricciones, reasignar y regenerar particiones, o
deshabilitar o habilitar restricciones y desencadenadores. Sintaxis:
ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name
ALTER COLUMN column_name
[ type_schema_name. ] type_name
[(
precision [ ,scale ]
| max
| xml_schema_collection
)]
[ COLLATE collation_name ]
[ NULL | NOT NULL ] [ SPARSE ]
| ADD | DROP
ROWGUIDCOL | PERSISTED | NOT FOR REPLICATION | SPARSE
| [ WITH { CHECK | NOCHECK } ]
| ADD
<column_definition>

| <computed_column_definition>

| <table_constraint>

| <column_set_definition>
[ ,...n ]
| DROP
[ CONSTRAINT ]
constraint_name
[ WITH
( <drop_clustered_constraint_option> [ ,...n ] )
]
[ ,...n ]
| COLUMN
column_name
[ ,...n ]
[ ,...n ]
| [ WITH CHECK | NOCHECK ] CHECK | NOCHECK CONSTRAINT

ALL | constraint_name [ ,...n ]

| ENABLE | DISABLE TRIGGER

ALL | trigger_name [ ,...n ]

| ENABLE | DISABLE CHANGE_TRACKING

[ WITH ( TRACK_COLUMNS_UPDATED = ON | OFF ) ]

| SWITCH [ PARTITION source_partition_number_expression ]

TO target_table
[ PARTITION target_partition_number_expression ]

[ WITH ( <low_lock_priority_wait> ) ]
| SET ( FILESTREAM_ON =
partition_scheme_name | filegroup | "default" | "NULL"
)
| REBUILD
[[PARTITION = ALL]
[ WITH ( <rebuild_option> [ ,...n ] ) ]
|[ PARTITION = partition_number
[ WITH ( <single_partition_rebuild_option> [ ,...n ] ) ]
]
]
| <table_option>
| <filetable_option>
[;]

https://msdn.microsoft.com. 201

TALLER DE BASE DE DATOS


Bibliografa Consultada
Patrick LeBlanc, Microsoft SQL Server 2012 Step by Step. OReilly
Media Inc. Sebastopol, CA, USA. 2013. (Traduccin realizada por
Jos A. Sandoval Acosta).
Pratt Philip J., Last Mary Z. Sql. 1ra. Edicin. Anaya Multimedia. Madrid,
Espaa. 2009.
Adam Jorgersen, Microsoft SQL Server 2012 Bible. John Wiley & Sons,
Inc. Indianapolis, Indiana. 2012.
https://msdn.microsoft.com. Pgina en Espaol, Consultado en Junio de
2015.