Académique Documents
Professionnel Documents
Culture Documents
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.
Integridad de entidad
Integridad de dominio
Integridad referencial
Integridad definida por el usuario.
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
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.
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.
DISEAR TABLAS
El mtodo ms eficiente para crear una tabla consiste en definir todo lo que se necesita en la
tabla al mismo tiempo :
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
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 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
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 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
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.
Observe que varchar(11) est entre comillas simples porque contiene signos de puntuacin
parntesis).
USE master
EXEC sp_addtype nss, 'VARCHAR(11)', 'NOT NULL'
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.
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:
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.
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.
KEY,
codCat
nombreProd
references
NOMSUC VARCHAR(30))
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())
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
14
GO
--
15
Columnas con una propiedad IDENTITY que genera los valores para la columna.
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
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.
17