Creación de Tablas e Integridad referencial en Transact SQL Server

18 08 2009

¿Como están amigos? después de unas pequeñas vacaciones además de un tiempo que eh tenido el blog un poco abandonado regreso dándoles otra ayudita en Transact – SQL, como saben estas todavía no son cosas muy difíciles, pero para los que tengan alguna duda podrán ayudarse con estos ejemplos que les comparto.

Bueno ahora sabemos que ya creada nuestra base de datos, con los parámetros que consideremos necesarios viene la creación de tablas y  tenemos que designarles sus respectivos tipos de datos además de hacer las relaciones, para esto tenemos dos maneras la forma gráfica y mediante querys en Transact, en lo que es integridad referencial es importante que las tablas estén VACIAS, ya que si las tablas contienen datos tendríamos problemas si alguno de estos registros insertados no cumplan con las reglas de integridad, tenemos 3 formas de manejarla:

  • Restricción(Cancelación)
  • Cascada
  • Anulación

Entonces vamos a crear las tablas y algunas relaciones, considerando llaves primarias y llaves foráneas, lo haremos primero en el modo gráfico mediante el asistente y luego con Transact SQL, también haremos el diagrama de la base de datos, para esto implementaremos dos bases de datos distintas con solo 3 tablas que servirán para nuestro ejemplo.

1.- Forma Gráfica:

  • Primero vamos al SQL Serer Management Studio

SQL01

  • Creemos nuestra base de Datos en Click derecho Databases – New DataBase y le colocaremos el nombre “Tienda”.

SQL002

  • Luego de creada nuestra Base de datos, vamos a crear tablas mediante el asistente, Click derecho – New Table y le damos los siguientes campos:

TABLAS003

TABLAS004

TABLAS011

  • Ahora si refrescas tu explorador del Management visualizarás las tablas ya creadas.
  • Si te has dado cuenta en las tablas Cliente tenemos el campo Cod_Distrito y en Factura tenemos el campo Cod_Cliente, te preguntarás ¿Por qué repito el valor?, bueno este campo nos permitirá hacer la relación en el diagrama de bases de datos como llave Foránea, eso lo explicaré mas adelante.
  • Ahora vamos a hacer el diagrama y crear las relaciones, vamos a Database Diagrams le hacemos click derecho – New Database Diagram (te preguntará si deseas crearlo coloca – Yes)

TABLAS006

  • Selecciona las tablas que participaran en el diagrama (en este caso todas) y dale Add, luego cuando estén agregadas sólo dale close  y verás que las tablas están en pantalla, puedes acomodarlas con el mouse si deseas.

TABLAS007

  • Ahora asignaremos las Primary Keys, las Llaves primarias son valores especiales que identificará de manera única a cada fila de la tabla y no pueden existir dos llaves primarias iguales estas no pueden repetirse en ningun otro registro de la tabla. Para asignarla simplemente en el diagrama puedes hacer click derecho sobre el campo y selecciona “Set Primary Key” (también se puede hacer al momento de crear los campos y tipos de datos).

TABLAS008

  • Crearemos ahora la relación, asignaremos la Foreign Key o también Llave Foránea esta establecerá la relación entre las tablas, para esto solo arrastramos desde el símbolo de la Primary Key en la tabla Distrito sin soltar hasta la tabla Cliente, donde nos pedirá que especifiquemos el campo a relacionar y elegimos Cod_Distrito y le damos Ok dos veces. Como podemos ver elegimos Cod_Distrito que es igual al campo de la Tabla Distrito, esto se definió al inicio colocándolo de manera premeditada para que ahora sirva finalmente de campo a relacionar, estos campos de relación pueden tener diferentes nombres pero es importante que sea el mismo tipo de dato sino la relación producirá un error.

TABLAS009

  • Hacemos los mismo desde la Tabla Cliente hacia la tabla Factura relacionandolo con el campo Cod_Cliente, ahora guarda los cambios.

!!!Ahora seguramente  si usas SQL Server 2008  tendrás un error “Saving changes is not permitted…” que no te permitará guardar los cambios, te sale un mensaje en el que te indica que tendrás que recrear las tablas, tranquilo para esto hay solución ¿Qué sucede? es que en SQL Server Management Studio ahora no te permite hacer este tipo de cambios mediante el Diseñador osea a nivel de interfaz (una razón muy buena para hacer esto por Transact) así que para que puedas continuar primero debes desmarcar la opcion Prevent saving changes that require table re-creation (Viene predeterminada) que se encuentra en la ruta Tools/Options/Designers/Table and Database Designers, así podrás guardar los cambios y tendrás tu diagrama.

TABLAS011

Finalmente el diagrama deberá quedar así, cierralo y guarda los cambios.

TABLAS010*Diagrama para cliente único

2.- Transact-SQL:

Bueno ahora veremos la forma de hacerlo mediante las Querys:

  • Primero vamos al boton New Query y abrimos una nueva consulta.
  • Debemos crear una base de datos y luego ponerla en uso entonces escribimos lo siguiente y lo ejecutamos:
CREATE DATABASE HOTELERA
USE HOTELERA
  • Ahora vamos a crear las tablas Hotel, Habitación y Cliente para eso escribimos y ejecutamos lo siguiente:
CREATE TABLE HOTEL (IdHotel char(5) not null, Nombre varchar (20),
 Direccion varchar (20), Telefono varchar (10),
 Num_Habitaciones int)

CREATE TABLE HABITACION (Num_Habitacion int not null, Estado varchar (20),
 Descripción varchar (20), Num_Camas int)

CREATE TABLE CLIENTE (DNI char(8) not null, Nombre varchar (50),
 Apellido varchar (50), Fecha_Ingreso datetime,
 Fecha_Salida datetime, Hora_Ingreso time, Hora_salida time)
  • Como podrás ver después de darle un refresh al explorador del Management tendremos nuestras tablas creadas, dentro de los tipos de datos te podrás preguntar porque algunos preferí colocarle “char” y en otras “varchar”, la razón es que en el tipo de dato char si colocas char(5) así se escriba un caracter se estará ocupando los 5 espacios reservados en cambio con varchar(5) si se escribe un sólo caracter esta cadena solo ocupará 1 espacio de los 5 reservados, esto es para siempre cuidar la memoria utilizada en tu base de datos, otra inquietud quizás sea ¿por qué utilizar la palabra reservada “not null” ? es que en estos campos se establecerán las Primary Keys más adelante y estas no aceptan valores nulos o vacios.
  • Podemos darles los siguientes Select para comprobar que estén correctamente creadas:
SELECT * FROM HOTEL
SELECT * FROM HABITACION
SELECT * FROM CLIENTE
  • Ahora vamos a agregarle a las tablas Habitación y Cliente los campos que servirán de referencia para las Foreign Keys (también son not null) mediante el comando “ALTER TABLE – ADD”
ALTER TABLE HABITACION ADD IdHotel char(5) not null
ALTER TABLE CLIENTE ADD Num_Habitacion int not null
  • Ahora agregémosle las Llaves Primarias y Foráneas
ALTER TABLE HOTEL ADD PRIMARY KEY (IdHotel)
ALTER TABLE HABITACION ADD PRIMARY KEY (Num_Habitacion)
ALTER TABLE CLIENTE ADD PRIMARY KEY (DNI)
ALTER TABLE HABITACION ADD FOREIGN KEY (IdHotel) references HOTEL
ALTER TABLE CLIENTE ADD FOREIGN KEY (Num_Habitacion) references HABITACION
  • Mediante el Alter Table Add Foreign Key también hacemos referencia a la tabla de donde proviene la Llave Principal y con la palabra reservada “references” se creará la relación entre las tablas.
  • Pasemos a la creación del Diagrama, se seguirán los mismos pasos ya mencionados en el modo gráfico, pero esta vez al agregar las tablas podremos observar que las relaciones ya están creadas solo guardamos el diagrama y listo.

TABLAS012

*Diagrama para cliente único

  • Como dato adicional puedes tambien eliminar alguna columna con el comando “ALTER TABLE – DROP COLUMN”
--ALTER TABLE ELIMINAR CAMPO
ALTER TABLE HOTEL DROP COLUMN Nombre_Campo
ALTER TABLE CLIENTE DROP COLUMN Nombre_Campo
ALTER TABLE HABITACION DROP COLUMN Nombre_Campo
  • Y Puedes modificar algun tipo de datos mediante el comando “ALTER TABLE – ALTER COLUMN”
--ALTER TABLE CAMBIO DE TIPO DE DATO
ALTER TABLE HOTEL ALTER COLUMN Telefono Nuevo_Tipo_Dato
ALTER TABLE HABITACION ALTER COLUMN Estado Nuevo_Tipo_Dato
ALTER TABLE CLIENTE ALTER COLUMN Apellido Nuevo_Tipo_Dato

Bueno espero que este post les permita trabajar de la manera adecuada y sobretodo que les haya sido de utilidad …saludos :D


Acciones

Información

21 respuestas

24 09 2009
Erick

Gracias Por el aporte!!! Me a servido de muchisimo la información!!!

6 10 2009
Pharsat

muchas gracias este es definitivamente un muy buen aporte, yo asimiliba a brear las relaciones es las views, y ya veo porque las relaciones mias no existian ^_^

22 10 2009
Aracely

hola amigo (a) tu informacion me a sido de mucha utilidad, gracias a ella pude despejarme un poco de mis dudas, referentes a la forma de programar en sql…en serio …gracias…

RECOMENDACION: chavos si la leen creanme le ayudara muchisimo igual que ami.

22 10 2009
huamanpunlay

soy amigo ^^ …me da mucho gusto que te haya servido la informacion saludos :D

3 11 2009
Ramon

Tengo una pregunta, necesito crear indentidad referencial entre tablas de dos bases de datos diferentes como podria lograr esto ??

Muchas gracias….

4 11 2009
huamanpunlay

Segun lo que sé esto no es dable por la misma referencia de integridad de la base de datos, una base de datos es un objeto de un servidor entonces cada tabla de la base de datos es un objeto de la base de datos. Podrías hacer turcos con triggers o algun sp depende de lo que quieras lograr …saludos
PD: Si alguien sabe que postee xD

19 11 2009
Ramon

Muchas gracias por tu respuesta (aunque efectivamente no es posible… o al menos eso leo en todas partes)

pd: como tu dices si alguien sabe que postee :)

7 01 2010
Alejandro

EXCELENTE justo lo que necesitaba… fijate que estoy leyendo el libro de “aprendiendo visual basic.net en 21 dias”… cierto cierto… es una jalada 21 dias… pero fuera del titulo extremadamente optimista, el libro tiene cosas buenas para romper hielo esta bien pero el tema de Bases de Datos dejo mucho que desear y se apega a la teoria que es muy buena para ser tan resumida en un par de capitulos pero no trae informacion de como crear la base de datos, las relaciones como materializarlas con sql server ademas de que habla del extinto MSDE, ademas el autor asume que para continuar descargemos unas bases de datos que el creo y empezar a usarlas pero asi que chiste tiene, ademas dicho link de descarga YA NO EXISTE….. gracias a ti complemente esa teoria en la practica y pude continuar claro y otra ayudadite del sitio de guille… por cierto estare al pendiente de mas informacion… creo que solo me restaria de momento encontrar las diversas formas de administrar y crear las claves segun el texto se ven 4 tecnicas desconosco si existen mas… estas son:
1. las que trae de por si la base de datos (autoincremento, Decremento,etc.)
2. las GUID que son pseudoaleatorios para ID globales.
3. las claves calculadas en tiempo de ejecucion.
4. generador de claves o claves calculadas almacenadas en tablas…

no se si tengas info. al respecto o me recomiendes una buena fuente o libro… te lo agradeceria infinitamente… pero aun asi ya me ayudaste mucho a romper mas hielo… gracias…

11 02 2010
huamanpunlay

Habilita el Alter

16 02 2010
pablo

gracias por tu aporte, a mi me ha resultado invalorable, ya que todos arrancan mas adelante y no es facil encontrar alguien que enseñe el comienzo del camino!!! nuevamente Gracias!

25 02 2010
karen

hola muchas gracias por tu aporte me ha servido bastante!!
saludos

23 05 2010
jhonmakey

hola ta bueno la informacion eh gracias —

6 07 2010
Cony

Gracias por el aporte, fue de gran ayuda. Saludos

4 09 2010
YAC

Que bien!!!! Era lo que andaba buscando… thanks…

28 02 2011
joselo

Muchas gracias, es lo que estaba buscando…
Gracias!

9 05 2011
alice H

gracias, eta muy interesante la info,

17 06 2011
spaijd11

oyee muy buena infoo!!…………

7 09 2011
Xacier

Buenisimo man!!!! Gracias por compartir tus conocimientos!!

21 09 2011
daniel

Hola me sirvio mucho,pero me gustaria saber ademas como mostrar en una gridview los datos ya relacionados,es decir que si pongo en un textbox el cod de cliente 1,me muestre los datos de factura y distrito correspondientes,que junte todo.Estoy probandolo en c# con visual studio 2008 pero no m sale.Gracias.

28 10 2011
Dulvin

muchismas gracias, por este post de verda k me sirvio de mucho.

22 11 2011
ripper009

que grande que sos man, me re sirvio. mil gracias

tenes algun manualcito para aprender sql server 2008??

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s




Seguir

Get every new post delivered to your Inbox.