Vous êtes sur la page 1sur 17

1

BASES DE DATOS
COMPONENTES DE UNA BASE DE DATOS
Una base de datos consta de una coleccin de tablas en las que se almacena un conjunto
especfico de datos estructurados.
Una tabla contiene una coleccin de filas (en ocasiones denominadas registros o tuplas) y de
columnas (tambin denominadas atributos). Cada columna de la tabla se ha diseado para
almacenar un determinado tipo de informacin (por ejemplo, fechas, nombres, importes en
moneda o nmeros).
Las tablas pueden presentar ndices, similares a los de los libros, que permiten localizar las filas
rpidamente. Se puede agregar restricciones de integridad referencial a las tablas con el fin de
asegurar la coherencia de los datos interrelacionados que se encuentran en tablas distintas.
Asimismo, una base de datos puede almacenar procedimientos que utilicen cdigo de
programacin de Transact-SQL para realizar operaciones con los datos que contiene la base de
datos, por ejemplo, almacenar vistas que permiten el acceso personalizado a los datos de las
tablas.

Lenguaje de consulta estructurado (SQL)


Para trabajar con los datos de una base de datos, tiene que utilizar un conjunto de comandos e
instrucciones (lenguaje) definidos por el software del DBMS. En las bases de datos relacionales
se pueden utilizar distintos lenguajes, el ms comn es SQL. Los estndares de SQL han sido
definidos por el American National Standards Institute (ANSI) y la International Standards
Organization (ISO). La mayor parte de los productos DBMS modernos aceptan el nivel bsico de
SQL-92, el ltimo estndar de SQL (publicado en 1992).
Existen dos tipos de comandos en el lenguaje SQL:
COMANDOS DDL (DATA DEFINITION LANGUAGE)
CREATE
DROP
ALTER

Utilizado para crear los objetos de la BD (tablas, ndices, triggers, stored


procedures, default, rules, etc)
Para borrar objetos
Para modificar tablas y otros objetos

COMANDOS DML (DATA MANIPULATION LANGUAGES)


SELECT
INSERT
UPDATE
DELETE

Consultar registros de ls tablas de la BD


Insertar nuevos registros en las tablas
Modificar los valores de las columnas y registros especificados de las tablas
Eliminar registros de tablas

Integridad de los datos


La integridad de los datos garantiza la calidad de los datos de la base de datos. Dos pasos
importantes en el diseo de las tablas son: la identificacin de valores vlidos para una columna
y la determinacin de cmo forzar la integridad de los datos en la columna.
Hay cuatro categoras de integridad de datos:

Ing. Rosa Navarrete

Integridad de entidad
Integridad de dominio
Integridad referencial
Integridad definida por el usuario.

Hay varias maneras de forzar cada tipo de integridad.


Tipo de integridad
Entidad

Dominio

Referencial
Definidos por el usuario

Opciones recomendadas
Restriccin PRIMARY KEY
Restriccin UNIQUE
Propiedad IDENTITY
Definicin predeterminada (DEFAULT)
Restriccin FOREIGN KEY
Restriccin CHECK
NOT NULL
Restriccin FOREIGN KEY
Restriccin CHECK
Todas las restricciones en columnas y tablas de CREATE TABLE
Procedimientos almacenados
Triggers

Integridad de entidad
La integridad de entidad define una fila como entidad nica para una tabla determinada. La
integridad de entidad fuerza la integridad de la columna o columnas de los identificadores o la
clave principal de una tabla (restricciones PRIMARY KEY o propiedades IDENTITY,
restricciones UNIQUE).
CLAVE PRIMARIA (RESTRICCIN PRIMARY KEY, PK)

Columna o grupo de columnas que obligan a la integridad de la entidad para asegurar que
cada fila es nica en la tabla
Cada tabla debe tener una clave primaria
Solamente puede haber una clave primaria en cada tabla
La seleccin de la PK de entre las claves candidatas, ser decisin del modelador de la BD

Integridad de dominio
La integridad de dominio viene dada por la validez de las entradas para una columna
determinada. Puede forzar la integridad de dominio si restringe el tipo (mediante tipos de datos),
el formato (mediante las reglas y las restricciones CHECK), o el intervalo de valores posibles
(mediante restricciones FOREIGN KEY, restricciones CHECK, definiciones DEFAULT,
definiciones NOT NULL y reglas).
Integridad referencial
La integridad referencial protege las relaciones definidas entre las tablas cuando se crean o se
eliminan registros. En SQL Server, la integridad referencial se basa en las relaciones entre las
claves externas y las claves principales o entre las claves externas y las claves nicas. La
integridad referencial garantiza que los valores clave son coherentes en las distintas tablas. Para
conseguir esa coherencia, es preciso que no haya referencias a valores inexistentes y que, si

Ing. Rosa Navarrete

cambia el valor de una clave, todas las referencias a ella se cambien en consecuencia en toda la
base de datos.
Cuando se fuerza la integridad referencial, SQL Server impide a los usuarios:

Agregar registros a una tabla relacionada si no hay ningn registro asociado en la tabla
principal.
Cambiar valores en una tabla principal de manera que queden registros hurfanos en una
tabla relacionada.
Eliminar registros de una tabla principal cuando hay registros relacionados coincidentes.

CLAVE FORANEA (RESTRICCIN FOREIGN KEY, FK)

Referencia a la clave primaria de una tabla. Una columna puede ser clave primaria y clave
fornea.
Chequea que los valores en la(s) columna(s) marcadas como FK, se encuentren entre los
valores de la(s) columna(s) de la PK en la otra tabla, para verificar que sean legtimos.
Proveen de un vnculo entre dos tablas
Refuerza la integridad referencial para asegurar que cada valor en la FK es vlido.
Puede contener valores nulos, pero debe especificar NOT NULL en las columnas de FK
donde los nulos no sean permitidos; (esto en el caso de una relacin mandatoria entre las
tablas padre e hija).

Por ejemplo, con las tablas sales (compras) y titles (ttulos) de la base de datos pubs, la
integridad referencial se basa en la relacin entre la clave externa (title_id) de la tabla sales y la
clave principal (title_id) de la tabla titles. Representa el hecho de que en una tienda
especificada con un stor_id, se ha realizado una compra, identificada con ord_num, de un libro,
identificado a travs de la clave primaria de la tabla titles, title_id; ese libro est descrito en la
tabla titles.

Integridad definida por el usuario


La integridad definida por el usuario le permite definir reglas de la compaa especficas que no
pertenecen a ninguna otra categora de integridad. Todas las categoras de integridad son
compatibles con la integridad definida por el usuario

Ing. Rosa Navarrete

DISEAR TABLAS
El mtodo ms eficiente para crear una tabla consiste en definir todo lo que se necesita en la
tabla al mismo tiempo :

Los tipos de datos que debe contener la tabla.


Las columnas de la tabla y los tipos de datos para cada columna (as como su longitud,
si es preciso).
Qu columnas aceptan valores NULL.
Si deben utilizarse (y cundo) restricciones o valores predeterminados y reglas.
Los tipos de ndices necesarios, dnde se necesitan y qu columnas son claves
principales y claves externas.

Categoras de tipos de datos


Los tipos de datos definen qu valores estn permitidos en cada columna. Para asignar un tipo
de datos a una columna, puede utilizar tipos de datos de SQL Server o crear sus propios tipos de
datos a partir de los del sistema.
Transact-SQL tiene estos tipos de datos base:
binary
decimal
nchar
smallint
varbinary

bit
float
ntext
smallmoney
varchar

char
image
nvarchar
text
uniqueidentifier

cursor
int
real
timestamp

datetime
money
smalldatetime
tinyint

Datos binarios
Los datos binarios se almacenan mediante los tipos de datos binary, varbinary e image. Los
datos binarios se componen de nmeros hexadecimales.
Una columna a la que se le asigne el tipo de datos binary debe tener la misma longitud fija
(hasta 8 KB) para cada fila.
En una columna a la que se le asigne el tipo de datos varbinary, las entradas pueden variar por
lo que respecta al nmero de dgitos hexadecimales (hasta 8 KB) que contiene.
Las columnas con datos image se pueden utilizar para almacenar datos binarios de longitud
variable que superen los 8 KB como, por ejemplo, documentos de Microsoft Word, hojas de
clculo de Microsoft Excel e imgenes, como mapas de bits, archivos GIF (Graphics Interchange
Format) y JPEG (Joint Photographic Experts Group).
En general, utilice varbinary para almacenar datos binarios, excepto si su longitud supera los 8
KB, en cuyo caso deber utilizar el tipo de datos image. Es recomendable que la longitud
definida de una columna binaria no supere la longitud mxima prevista para los datos binarios
que deben almacenarse.

Datos de carcter

Ing. Rosa Navarrete

Los datos alfanumricos se almacenan mediante los tipos de datos char, varchar y text (de
SQLl 2000).
Se define como dato de carcter o alfanumricos a cualquier combinacin de letras, smbolos y
caracteres numricos. Por ejemplo, son datos de carcter vlidos 928, Jimnez y
(0*&(%B99nh jkJ..
Utilice varchar cuando vare el nmero de caracteres de las entradas de una columna, siempre
que no haya ninguna entrada que tenga una longitud mayor de 8 KB.
Utilice char cuando todas las entradas de una columna tengan la misma longitud fija (hasta 8
KB).
Las columnas de datos text pueden utilizarse para almacenar caracteres ASCII mayores de 8
KB.
Por ejemplo, dado que los documentos HTML son caracteres ASCII y suelen ocupar ms de 8
KB, se pueden almacenar en columnas text en SQL Server antes de verlos con un explorador.
Ya no es comn en Sql 2005.
Se recomienda que la longitud definida para una columna de datos alfanumricos no supere a la
longitud mxima prevista para los datos alfanumricos que vayan a almacenarse.
En SQL Server 2005 se puede declarar char(max), varchar(max) con lo cual el espacio de
almacenamiento puede ser de hasta 2^31-1 bytes, aproximadamente 2 Gb. Se puede usar
varchar(max), nvarchar(max) y varbinary(max) en lugar de text, ntext e image.

Datos Unicode
Si se utilizan los tipos de datos Unicode, una columna puede almacenar cualquier carcter que
defina el estndar Unicode, lo que incluye a todos los caracteres definidos en los distintos juegos
de caracteres. Los tipos de datos Unicode ocupan el doble de espacio que los que no lo son.
Se almacenan mediante los tipos de datos nchar, nvarchar y ntext de SQL Server.

Datos de fecha y hora


Los datos de fecha y hora se almacenan mediante los tipos de datos datetime y smalldatetime
Los datos de fecha y hora constan de combinaciones vlidas de fecha y hora. Por ejemplo, datos
vlidos de fecha y hora pueden ser 4/01/00 12:15:00:00:00 p.m. y 1:28:29:15:01 a.m. 17/8/99.
Utilice datetime para almacenar datos del intervalo que va desde el 1 de enero de 1753 hasta el
31 de diciembre del 9999 (para cada valor se necesitan 8 bytes de espacio de almacenamiento).
Utilice smalldatetime para almacenar fechas en el intervalo que va desde el 1 de enero de 1900
hasta el 6 de junio del ao 2079 (para cada valor se necesitan 4 bytes de espacio de
almacenamiento).

Datos numricos
Los datos numricos se componen exclusivamente de nmeros. Incluyen nmeros positivos y
negativos, decimales, fracciones y nmeros enteros.

Datos enteros
Son datos enteros los nmeros enteros positivos y negativos, como -15, 0, 5 y 2.509. Los datos
enteros se almacenan mediante los tipos de datos int, smallint y tinyint

Ing. Rosa Navarrete

Utilice el tipo de datos int para almacenar nmeros del intervalo comprendido entre
-2.147.483.648 y 2.147.483.647 (para cada valor se necesitan 4 bytes de espacio de
almacenamiento).
Utilice el tipo de datos smallint para almacenar nmeros del intervalo que va desde -32.768
hasta 32.767 (para cada valor se necesitan 2 bytes de espacio de almacenamiento),
tinyint para almacenar nmeros del intervalo que va desde 0 hasta 255 (para cada valor se
necesita 1 byte de espacio de almacenamiento).

Datos decimales
Los datos decimales se componen de datos de los que se almacena hasta el dgito menos
significativo. Estos datos se almacenan mediante los tipos de datos decimal o numeric de SQL
Server.
El nmero de bytes necesario para almacenar un valor decimal o numeric depende del nmero
total de dgitos de los datos y del nmero de decimales que haya a la derecha del separador
decimal. Por ejemplo, se necesitan ms bytes para almacenar el valor 19.283,29383 que para
almacenar el valor 1,1.
En SQL Server, el tipo de datos numeric es sinnimo del tipo de datos decimal.

Datos numricos aproximados


Los datos numricos aproximados (en coma flotante) constan de datos que se almacenan con
tanta precisin como permite el sistema de numeracin binario.
Los datos numricos aproximados se almacenan mediante los tipos de datos float y real de SQL
Server. Por ejemplo, dado que, en notacin decimal, la fraccin un tercio se expresa como
0,333333 (hasta el infinito), este valor no se puede representar con total precisin mediante los
datos decimales aproximados. Por lo tanto, el valor que se recupera de SQL Server puede no
coincidir exactamente con el que se almacen inicialmente en la columna. Otros ejemplos de
aproximaciones numricas son los valores de coma flotante que acaban en 0,3, 0,6 y 0,7.

Datos de moneda
Los datos de moneda representan cantidades positivas o negativas de dinero. Los datos de
moneda se almacenan mediante los tipos de datos money y smallmoney de SQL Server.
Los datos de moneda pueden almacenarse con una precisin mxima de cuatro decimales.
Utilice el tipo de datos money para almacenar valores del intervalo comprendido entre
-922.337.203.685.477,5808 y +922.337.203.685.477,5807 (para almacenar cada valor se
necesitan 8 bytes).
Utilice el tipo de datos smallmoney para almacenar valores del intervalo comprendido entre
-214.748,3648 y 214.748,3647 (para almacenar cada valor se necesitan 4 bytes).
Si se necesita un nmero mayor de decimales, utilice el tipo de datos decimal.

Datos especiales
Los datos especiales son aquellos que no corresponden a ninguna de las categoras de datos
mencionadas anteriormente (datos binarios, de carcter, Unicode, de fecha y de hora, numricos
y de moneda).
SQL Server incluye cuatro tipos de datos especiales:
timestamp

Ing. Rosa Navarrete

Se utiliza para indicar la secuencia de actividades de SQL Server en una fila,


representada como un nmero creciente en formato binario. Cuando se modifica una fila
de una tabla, el valor de timestamp (la marca de tiempo) se actualiza con el valor actual
de timestamp de la base de datos que se obtiene con la funcin @@DBTS.
Los datos de tipo timestamp no estn relacionados con la fecha ni la hora de una
insercin o de un cambio en los datos. Si desea registrar automticamente en qu
momento se producen modificaciones en una tabla, utilice un tipo de datos datetime o
smalldatetime para registrar los sucesos y los triggeres.
bit
Puede ser un 1 o un 0. Utilice el tipo de datos bit para representar los valores TRUE
(verdadero) o FALSE (falso), o S o NO. Por ejemplo, un cuestionario para los clientes en
el que se pregunte si una visita es la primera del cliente puede almacenarse en una
columna de tipo bit.
uniqueidentifier
Se trata de un nmero hexadecimal de 16 bytes que hace referencia a un identificador
exclusivo global (GUID). El GUID es especialmente til cuando una fila debe ser nica
entre otras muchas. Por ejemplo, utilice el tipo de datos uniqueidentifier en una
columna con nmeros de identificacin de los clientes para compilar una lista de clientes
de una compaa en varios pases.
definido por el usuario.
Permite que el usuario defina tipos de datos, como, por ejemplo, Tipo_clave_Producto,
que se basa en el tipo de datos char y que consta de dos letras maysculas seguidas de
un nmero de proveedor de cinco cifras. Los tipos de datos definidos por el usuario se
basan en los tipos de datos del sistema de SQL Server. Se pueden utilizar cuando varias
tablas deben almacenar el mismo tipo de datos en una columna y desea asegurarse de
que dichas columnas tienen exactamente el mismo tipo de datos, longitud y condicin de
la aceptacin de valores NULL. Por ejemplo, es posible crear un tipo de datos definido
por el usuario con el nombre cdigoPostal a partir del tipo de datos char.

TIPOS DE DATOS DE USUARIO


Los nombres de los tipos de datos definidos por el usuario tienen que ser nicos en la base de
datos, pero tipos de datos definidos por el usuario con distintos nombres pueden tener la misma
definicin.
Al ejecutar sp_addtype se crea un tipo de datos definido por el usuario que se agrega a la tabla
del sistema systypes de una base de datos concreta, a menos que sp_addtype se ejecute con
master como la base de datos actual. Si el tipo de datos definido por el usuario tiene que estar
disponible en todas las nuevas bases de datos definidas por el usuario, agrguelo a model.
Despus de crear un tipo de datos definido por el usuario, puede utilizarse en CREATE TABLE o
ALTER TABLE, as como enlazarse a valores predeterminados y reglas.
No se pueden definir tipos de datos definidos por el usuario que utilicen el tipo de datos
timestamp de SQL Server.

Ejemplos
A. Crear un tipo de datos definido por el usuario que no admita
valores NULL
Este ejemplo crea un tipo de datos definido por el usuario llamado nss (nmero de la seguridad
social) que est basado en el tipo de datos varchar de SQL Server. El tipo de datos nss se
utiliza en columnas que almacenan nmeros de la seguridad social de 11 cifras (999-99-9999).
La columna no puede ser NULL.

Ing. Rosa Navarrete

Observe que varchar(11) est entre comillas simples porque contiene signos de puntuacin
parntesis).
USE master
EXEC sp_addtype nss, 'VARCHAR(11)', 'NOT NULL'

B. Crear un tipo de datos definido por el usuario que admita valores


NULL
Este ejemplo crea un tipo de datos definido por el usuario (basado en el tipo de datos datetime)
llamado fecha_nac, que permite valores NULL.
USE master
EXEC sp_addtype fecha_nac, datetime, 'NULL'

C. Crear tipos de datos definidos por el usuario adicionales


Este ejemplo crea dos tipos de datos definidos por el usuario adicionales, telefono y fax, para
nmeros de telfono y fax locales e internacionales.
USE master
EXEC sp_addtype telefono, 'varchar(24)', 'NOT NULL'
EXEC sp_addtype fax, 'varchar(24)', 'NULL'

Utilizar restricciones, valores predeterminados y valores NULL


Para disear las tablas, es necesario identificar los valores vlidos para una columna y decidir
cmo se debe exigir la integridad de los datos de la columna. SQL Server proporciona varios
mecanismos para exigir la integridad de los datos de una columna:

Las restricciones de clave principal (PRIMARY KEY).


Las restricciones de clave externa (FOREIGN KEY).
Las restricciones de no duplicados (UNIQUE).
Las restricciones de comprobacin (CHECK).
Las definiciones de valores predeterminados (DEFAULT).
La aceptacin de NULL

Restricciones de clave principal


Una tabla suele tener una columna o una combinacin de columnas cuyos valores identifican de
forma nica a cada fila de la tabla. Estas columnas se denominan claves principales de la tabla y
exigen la integridad de entidad de la tabla.
Puede crear una clave principal mediante la definicin de una restriccin PRIMARY KEY cuando
cree o modifique una tabla.
Una tabla slo puede tener una restriccin PRIMARY KEY, y ninguna columna a la que se
aplique una restriccin PRIMARY KEY puede aceptar valores Null.
Cuando especifique una restriccin PRIMARY KEY para una tabla se crear un ndice nico para
las columnas de la clave principal. Este ndice tambin permite un acceso rpido a los datos
cuando se utiliza la clave principal en las consultas.

Ing. Rosa Navarrete

Si se define una restriccin PRIMARY KEY para ms de una columna, puede haber valores
duplicados dentro de la misma columna pero cada combinacin de valores de todas las
columnas de la definicin de la restriccin PRIMARY KEY debe ser nica.

Tal como se muestra, las columnas au_id (IdAutor) y title_id (IdTtulo) de la tabla titleauthor
(ttuloAutor) forman una restriccin PRIMARY KEY compuesta para la tabla titleauthor que
garantiza que la combinacin de au_id y title_id sea nica.
Cuando trabaja con combinaciones, las restricciones PRIMARY KEY relacionan una tabla con
otra. Por ejemplo, para determinar qu autor ha escrito cada libro, puede utilizar una
combinacin triple entre la tabla authors (autores), la tabla titles (ttulos) y la tabla titleauthor.
Dado que titleauthor contiene columnas para las columnas au_id y title_id, se puede tener
acceso a la tabla titles mediante la relacin entre titleauthor y titles.
Restricciones de clave externa
Una clave externa, es una columna o una combinacin de columnas que se utiliza para
establecer y exigir un vnculo entre los datos de dos tablas distintas. Se crea un vnculo entre dos
tablas mediante la adicin en una tabla de la columna o columnas que contienen los valores de
la clave principal de la otra tabla. Esta columna se convierte en una clave externa en la segunda
tabla.
Puede crear una clave externa mediante la definicin de una restriccin FOREIGN KEY cuando
cree o modifique una tabla.
Por ejemplo, la tabla titles (ttulos) de la base de datos pubs tiene un vnculo con la tabla
publishers (editores) porque hay una relacin lgica entre los libros y los editores. La columna
pub_id de la tabla titles coincide con la columna de la clave principal de la tabla publishers. La
columna pub_id de la tabla titles es la clave externa para la tabla publishers.

Ing. Rosa Navarrete

10

No es necesario que una restriccin FOREIGN KEY est vinculada nicamente a una restriccin
PRIMARY KEY de otra tabla; tambin puede definirse para que haga referencia a las columnas
de una restriccin UNIQUE de otra tabla.
Una restriccin FOREIGN KEY puede contener valores NULL, pero si alguna columna de una
restriccin FOREIGN KEY compuesta contiene valores NULL, se omitir la comprobacin de la
restriccin FOREIGN KEY.
Cuando se agrega una nueva fila de datos a una tabla o se cambian los datos de una fila
existente, los valores de la columna o columnas de la clave externa debern encontrarse en la
columna o columnas de la clave principal de la otra tabla o bien debern ser NULL.(en relaciones
no mandatorias).

Una restriccin FOREIGN KEY puede hacer referencia a columnas de tablas de la misma base
de datos o a columnas de una misma tabla (tablas con referencia a s mismas). Un ejemplo de
tabla con referencia a s misma sera una tabla de empleados que contuviera tres columnas:
nmeroEmpleado, nombreEmpleado y nombreEmpleadoResponsable. Dado que los
responsables tambin son empleados, hay una relacin de clave externa desde la columna
nmeroEmpleadoResponsable a la columna nmeroEmpleado.

Aunque el propsito principal de una restriccin FOREIGN KEY es el de controlar los datos que
pueden almacenarse en la tabla de la clave externa, tambin controla los cambios realizados en
los datos de la tabla de la clave principal. Por ejemplo, si se elimina la fila de un editor de la tabla
publishers y el identificador de ese editor se utiliza para libros que figuran en la tabla titles, se
rompe la integridad relacional entre las dos tablas: los libros del editor eliminado quedarn sin
correspondencia en la tabla titles, al perderse los vnculos con los datos de la tabla publishers.
Con una restriccin FOREIGN KEY se evita esta situacin. Exige la integridad referencial al
asegurar que no se puedan realizar cambios en los datos de la tabla de la clave principal si esos
cambios anulan el vnculo con los datos de la tabla de la clave externa. Si se intenta eliminar la
fila de una tabla de la clave principal o cambiar un valor de la clave principal, la accin no
progresar si el valor de la clave principal cambiado o eliminado corresponde a un valor de la
restriccin FOREIGN KEY de otra tabla. Para cambiar o eliminar una fila de una restriccin
FOREIGN KEY, antes debe eliminar los datos de la clave principal en la tabla de la clave externa
o bien cambiar los datos de la clave externa en la tabla de la clave externa y vincular, de ese
modo, la clave externa con otros datos de clave principal.
Una restriccin FOREIGN KEY puede ser un ndice adecuado.
Restricciones UNIQUE
Puede utilizar restricciones UNIQUE para asegurar que no se escriban valores duplicados en
columnas especficas que no formen parte de una clave principal.
Aunque tanto una restriccin de no duplicados como de clave principal exigen que los elementos
sean nicos, es preferible utilizar una restriccin UNIQUE en vez de una restriccin PRIMARY
KEY cuando desee exigir la unicidad de:

Una columna o una combinacin de columnas que no sea la clave principal.


En una tabla se puede definir varias restricciones UNIQUE, pero slo puede definirse una
restriccin PRIMARY KEY.
Una columna que acepte valores Null.

Ing. Rosa Navarrete

11

Las restricciones UNIQUE pueden definirse en columnas que aceptan valores Null, mientras
que las restricciones PRIMARY KEY slo pueden definirse en columnas que no aceptan
valores Null.
Tambin es posible hacer referencia a una restriccin UNIQUE con una restriccin
FOREIGN KEY.

Restricciones CHECK
Las restricciones de comprobacin (CHECK) exigen la integridad del dominio mediante la
limitacin de los valores que puede aceptar una columna.
Son similares a las restricciones FOREIGN KEY porque controlan los valores que se colocan en
una columna. La diferencia estriba en la forma en que determinan los valores vlidos: Las
restricciones FOREIGN KEY obtienen la lista de valores vlidos de otra tabla, mientras que las
restricciones CHECK determinan los valores vlidos a partir de una expresin lgica que no se
basa en datos de otra columna. Por ejemplo, es posible limitar el intervalo de valores para una
columna salary (salario) mediante la creacin de una restriccin CHECK que permita
nicamente datos del intervalo comprendido entre -si por ejemplo se tratara de dlares- $15.000
y $100.000. As se impide que se escriban salarios fuera de este intervalo.

Definiciones DEFAULT
Cada columna de un registro debe contener un valor, aunque ese valor sea NULL. Puede haber
situaciones en las que necesite cargar una fila de datos en una tabla pero no conozca el valor de
una columna o el valor ya no exista. Si la columna acepta valores NULL, puede cargar la fila con
un valor NULL. Pero, dado que puede no resultar conveniente utilizar columnas que acepten
valores NULL, una mejor solucin podra ser establecer una definicin DEFAULT para la
columna donde corresponda. Por ejemplo, es corriente especificar el valor cero como valor
predeterminado para las columnas numricas, o N/D (no disponible) como valor predeterminado
para las columnas de cadenas cuando no se especifica ningn valor.
Cuando cargue una fila en una tabla con una definicin DEFAULT para una columna, le est
indicando implcitamente a SQL Server que cargue un valor predeterminado en la columna
cuando no se especifique un valor para la misma.

Permitir valores NULL


La aceptacin de valores NULL de una columna determina si las filas de una tabla pueden
contener un valor NULL en esa columna.
Un valor Null, o NULL, no es igual que cero (0), en blanco o que una cadena de caracteres de
longitud cero, como ""; NULL significa que no hay ninguna entrada. Su presencia suele implicar
que el valor es desconocido o indefinido. Por ejemplo, un valor NULL en la columna price
(precio), que se encuentra en la tabla titles de la base de datos pubs, no significa que el libro no
tenga precio; NULL significa que el precio se desconoce o que no ha sido especificado.
Si se inserta una fila, pero no se incluye ningn valor para una columna que permita valores Null,
se escribe el valor NULL (a menos que exista un objeto o una definicin DEFAULT). Una
columna definida con la palabra clave NULL tambin acepta una entrada explcita de NULL por
parte del usuario, independientemente del tipo de datos de que se trate o de si tiene un valor
predeterminado asociado.

Ing. Rosa Navarrete

12

El valor NULL no debe ponerse entre comillas porque no sera interpretado como un valor Null,
sino como la cadena de caracteres NULL.
Las columnas definidas con una restriccin PRIMARY KEY o con una propiedad IDENTITY no
pueden aceptar valores Null.

CREATE TABLE (T-SQL)


SQL Server 2005 puede tener hasta dos mil millones de tablas por cada base de datos y 1.024
columnas por tabla. El nmero de filas y el tamao total de la tabla estn limitados solamente por
el espacio de almacenamiento disponible. El nmero mximo de bytes por fila es 8.060
USE PRUEBA
GO
-- Crea tablas relacionadas
CREATE TABLE CATEGORIAS (CodCat int primary key, nombreCat varchar(30))
CREATE
TABLE
PRODUCTOS
(CodProd
int
PRIMARY
varchar(30), unidades char(10), preciounit Money,
CATEGORIAS(CodCat))

KEY,
codCat

nombreProd
references

-- Crea tabla con un valor DEFAULT y restriccin UNIQUE


CREATE TABLE CLIENTES (CodCli int PRIMARY KEY, cedula int UNIQUE,
nombre varchar(30) not null, apellido varchar(30) not null, direcc
varchar(30) default 'NO SE CONOCE')

-- Crea tabla definiendo un CONSTRAINT con nombre para clave primaria


Create table Empleado (
emp_id int
CONSTRAINT PK_emp_id PRIMARY KEY,
Emp_nombre varchar(30))

-- Crea tablas relacionadas


CREATE TABLE SUCURSALES (CODSUC INT PRIMARY KEY,

NOMSUC VARCHAR(30))

CREATE TABLE ARTICULOS (CODART CHAR(7) PRIMARY KEY, NOMART VARCHAR(30),


UNID CHAR(5))
CREATE TABLE VENTAS_DIARIAS (CODSUC INT, CODART CHAR(7), UNIDVENTA
SMALLINT, DIA DATETIME,
CONSTRAINT PK_VENTAS_DIARIAS PRIMARY KEY (CODSUC, CODART),
CONSTRAINT FK_VD_SUC FOREIGN KEY (CODSUC) REFERENCES
SUCURSALES(CODSUC),
CONSTRAINT FK_VD_ART FOREIGN KEY (CODART) REFERENCES ARTICULOS(CODART))

-- Crea tabla con campo calculado


CREATE TABLE tablaEj
(
Valor1 int,

Ing. Rosa Navarrete

13

Valor2 int,
promedio AS (valor1 + valor2)/2
)
-- Crea tabla con valor IDENTITY para campo de clave primaria
CREATE TABLE TABEJEM (CODIGO INT IDENTITY PRIMARY KEY, CAMPOA CHAR(10),
CAMPOB DATETIME DEFAULT GETDATE())

-- Crear una tabla completa PurchaseOrderDetail creada en la base de


datos AdventureWorks
CREATE TABLE [dbo].[PurchaseOrderDetail]
(
[PurchaseOrderID] [int] NOT NULL
REFERENCES Purchasing.PurchaseOrderHeader(PurchaseOrderID),
[LineNumber] [smallint] NOT NULL,
[ProductID] [int] NULL
REFERENCES Production.Product(ProductID),
[UnitPrice] [money] NULL,
[OrderQty] [smallint] NULL,
[ReceivedQty] [float] NULL,
[RejectedQty] [float] NULL,
[DueDate] [datetime] NULL,
[rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL
CONSTRAINT [DF_PurchaseOrderDetail_rowguid] DEFAULT (newid()),
[ModifiedDate] [datetime] NOT NULL
CONSTRAINT [DF_PurchaseOrderDetail_ModifiedDate] DEFAULT (getdate()),
[LineTotal] AS (([UnitPrice]*[OrderQty])),
[StockedQty] AS (([ReceivedQty]-[RejectedQty])),
CONSTRAINT [PK_PurchaseOrderDetail_PurchaseOrderID_LineNumber]
PRIMARY KEY CLUSTERED ([PurchaseOrderID], [LineNumber])
WITH (IGNORE_DUP_KEY = OFF)
)
ON [PRIMARY]

ALTER TABLE
Una vez creada una tabla, es posible modificar su definicin con la sentencia ALTER TABLE.EJEMPLOS:
-- Aadir un campo a una tabla creada
Use prueba
go
CREATE TABLE doc_exa ( column_a INT)
GO
ALTER TABLE doc_exa ADD column_b VARCHAR(20) NULL, column_c bit
GO
EXEC sp_help doc_exa
go
Drop table doc_exa

Ing. Rosa Navarrete

14

GO

-- Quitar una columna a una tabla


CREATE TABLE doc_exb ( column_a INT, column_b VARCHAR(20) NULL) ;
GO
ALTER TABLE doc_exb DROP COLUMN column_b ;
GO
EXEC sp_help doc_exb ;
GO

/* Cambiar tipo de datos de una columna. En el ejemplo siguiente se


modifica una columna de una tabla de INT a DECIMAL */
CREATE TABLE doc_exy ( column_a INT ) ;
GO
INSERT INTO doc_exy (column_a)
VALUES (10) ;
GO
ALTER TABLE doc_exy ALTER COLUMN column_a DECIMAL (5,2) ;
GO
EXEC sp_help doc_exy ;
GO

--

Agregar restriccin UNIQUE

CREATE TABLE doc_exc ( column_a INT) ;


GO
ALTER TABLE doc_exc ADD column_b VARCHAR(20) NULL
CONSTRAINT exb_unique UNIQUE ;
GO
EXEC sp_help doc_exc ;
GO

-Agregar una restriccin DEFAULT


CREATE TABLE doc_exz ( column_a INT, column_b INT) ;
GO
INSERT INTO doc_exz (column_a)
VALUES ( 7 ) ;
GO
ALTER TABLE doc_exz
ADD CONSTRAINT col_b_def
DEFAULT 50 FOR column_b ;
GO
INSERT INTO doc_exz (column_a)
VALUES ( 10 ) ;
GO
SELECT * FROM doc_exz ;
GO
DROP TABLE doc_exz ;
GO

Ing. Rosa Navarrete

15

/* En el ejemplo siguiente se agregan varias columnas con


restricciones que se definen con la nueva columna. La primera columna
nueva tiene una propiedad IDENTITY. Cada fila de la tabla tiene nuevos
valores incrementales en la columna de identidad */
CREATE TABLE doc_exe ( column_a INT CONSTRAINT column_a_un UNIQUE) ;
GO
ALTER TABLE doc_exe ADD
-- Aadir una columna PRIMARY KEY identity.
column_b INT IDENTITY
CONSTRAINT column_b_pk PRIMARY KEY,
-- Aadir una columna que referencia a otra columna de la misma tabla
column_c INT NULL
CONSTRAINT column_c_fk
REFERENCES doc_exe(column_a),
-- Aadir una columna con default.
column_d DECIMAL(3,3)
CONSTRAINT column_d_default
DEFAULT .081 ;
GO
EXEC sp_help doc_exe ;
GO
DROP TABLE doc_exe ;
GO

-- Quitar una restriccin (constraint)


CREATE TABLE doc_exc ( column_a INT
CONSTRAINT my_constraint UNIQUE) ;
GO
ALTER TABLE doc_exc DROP CONSTRAINT my_constraint ;
GO
DROP TABLE doc_exc ;
GO

AGREGAR FILAS CON INSERT


La instruccin INSERT agrega una o ms filas nuevas a una tabla.
INSERT [INTO] tablaOVista [(listaColumnas)] valoresDatos
Cuando una listaColumnas no enumera todas las columnas de la tabla o vista, se inserta un
valor de NULL (o el valor predeterminado si se ha definido alguno para la columna) en aquellas
columnas que no se hayan enumerado en la lista. Todas las columnas no especificadas en la
lista de columnas deben permitir valores NULL o tener un valor predeterminado asignado.
Las instrucciones INSERT no especifican valores para los siguientes tipos de columna porque
SQL Server genera los valores de las columnas de estos tipos:

Columnas con una propiedad IDENTITY que genera los valores para la columna.

Ing. Rosa Navarrete

16

Columnas que tengan un valor predeterminado que utilice la funcin NEWID para
generar un valor GUID exclusivo.
Columnas calculadas.

Los valores de datos suministrados deben coincidir con la lista de columnas. Hay dos maneras
de especificar los valores de datos:

Utilizar una clusula VALUES para especificar los valores de datos para una fila:
INSERT INTO MyTable (PriKey, Description)
VALUES (123, 'A description of part 123.')

Utilizar una subconsulta SELECT para especificar los valores de datos para una o ms
filas.
INSERT INTO MyTable (PriKey, Description)
SELECT ForeignKey, Description
FROM SomeView

EJEMPLOS:
Insertar valores en las tablas creadas en BD Prueba

CAMBIAR DATOS CON UPDATE


La instruccin UPDATE puede cambiar los valores de filas individuales, grupos de filas o todas
las filas de una tabla o vista.
Una instruccin UPDATE que haga referencia a una tabla o vista slo puede cambiar los datos
de una tabla a la vez.
La instruccin UPDATE tiene estas clusulas principales:

SET
Contiene una lista separada por comas de las columnas que deben actualizarse y el
nuevo valor de cada columna, con el formato nombreColumna = expresin. El valor
suministrado por las expresiones incluye elementos tales como constantes, valores
seleccionados de una columna de otra tabla o vista, o valores calculados por una
expresin compleja.
FROM
Identifica las tablas o vistas que suministran los valores de las expresiones de la clusula
SET, y las condiciones de combinacin opcional entre las tablas o vistas de origen.
WHERE
Especifica la condicin de bsqueda que define las filas de las tablas y vistas de origen
que estn calificadas para proporcionar valores para las expresiones de la clusula SET.

Esta instruccin de actualizacin aumenta el precio de todos los productos de Northwind de la


categora 2 en un 10 por ciento:
Use Pubs
go
UPDATE Products
SET UnitPrice = UnitPrice * 1.1
WHERE CategoryID = 2

Ing. Rosa Navarrete

17

ELIMINAR FILAS CON DELETE


La instruccin DELETE quita una o varias filas de una tabla o vista.
DELETE tablaOVista FROM orgenesTablas WHERE condicinBsqueda
tablaOVista nombra la tabla o vista de la que se van a eliminar las filas. Se eliminan todas las
filas de tablaOVista que renan los requisitos de la condicin de bsqueda de la clusula
WHERE. Si no se especifica una clusula WHERE, se eliminan todas las filas de tablaOVista.
La clusula FROM especifica tablas o vistas adicionales y condiciones de combinacin que
pueden ser utilizadas por los predicados de la condicin de bsqueda de la clusula WHERE
para calificar las filas que deben ser eliminadas de tablaOVista. Las filas no se eliminan de las
tablas mencionadas en la clusula FROM, slo de la tabla mencionada en tablaOVista.
Esta secuencia de comandos muestra las tres instrucciones DELETE necesarias para eliminar
las filas asociadas con los productos suministrados por la empresa llamada Lyngbysild de la
base de datos Northwind. No sera una operacin empresarial tpica porque conlleva la
eliminacin de lneas de pedidos existentes, pero muestra una serie de eliminaciones de distinta
complejidad.
USE Northwind
GO
DELETE [Order Details]
FROM Suppliers, Products
WHERE Products.SupplierID = Suppliers.SupplierID
AND Suppliers.CompanyName = 'Lyngbysild'
AND [Order Details].ProductID = Products.ProductID
GO
DELETE Products
FROM Suppliers
WHERE Products.SupplierID = Suppliers.SupplierID
AND Suppliers.CompanyName = 'Lyngbysild'
GO
DELETE Suppliers
WHERE CompanyName = 'Lyngbysild'
GO

Eliminar todas las filas con TRUNCATE TABLE


La instruccin TRUNCATE TABLE es un mtodo rpido y no registrado para eliminar todas las
filas de una tabla. Casi siempre es ms rpido que una instruccin DELETE sin condiciones
porque DELETE registra cada eliminacin de fila y TRUNCATE TABLE registra slo la
cancelacin de la asignacin de pginas completas de datos. TRUNCATE TABLE libera
inmediatamente todo el espacio ocupado por los datos e ndices de esa tabla. Tambin se
liberan las pginas de distribucin de todos los ndices.
Como en el caso de DELETE, la definicin de una tabla vaciada con TRUNCATE TABLE
permanece en la base de datos, junto con sus ndices y sus objetos asociados. Para quitar la
definicin de la tabla debe utilizarse la instruccin DROP TABLE.

Ing. Rosa Navarrete

Vous aimerez peut-être aussi