11
Sep
09

Transact Sql Básico – Crear una Base de Datos con llaves primarias y relaciones en SQL-Server 2005

Bueno, creo que este es un buen tema para publicar, como hacer una base de datos en Sql Server con sus llaves primarias y relaciones pero a puro código, asi que comparto este código con ustedes, lo único que deben hacer es pegarlo en el editor de consultas de SQL y listo…

Lo primero es crear la base de datos…

Create Database Inscripciones
go

luego le decimos que cambie a la base que hemos creado

Use Inscripciones
go

Ahora creamos las tablas en nuestra base de datos:

Create Table Estudiantes
(IdEstudiante int,
Nombres VarChar(25),
Apellidos VarChar(25),
Direccion VarChar(50),
Telefono VarChar(8),
Primary Key (IdEstudiante))
go

Create Table Materias
(IdMateria int,
Materia VarChar(30),
Primary Key (IdMateria))
go

Create Table Notas
(IdEstudiante int,
IdMateria int,
Nota decimal (10,2))
go

Ahora que tenems nuestras tablas creadas con sus respectivas llaves primarias, procederemos a crear los constraint o relaciones para las tablas.

Alter Table Notas
add constraint fk_Notas_IdEstudiante
Foreign key (IdEstudiante)
References Estudiantes(IdEstudiante)
go

Alter Table Notas
add constraint fk_Notas_IdMateria
Foreign key (IdMateria)
References Materias(IdMateria)
go

ahora podemos perfectamente ver el diagrama de la base de datos que queda de esta forma:

Diagrama DB Inscripciones

Ahora nuestra base de datos está lista para que podamos trabajar con ella, y para que sea mas real, le agregaremos algunos registros y jugaremos con ella un poco…

Primero, agregaremos algunos estudiantes…

Insert Into Estudiantes Values (01, ‘Maria’, ‘Hernandez’, ‘Col. Santa Isabel’, ‘22542121’)
Insert Into Estudiantes Values (02, ‘Oscar’, ‘Mejía’, ‘Final 4º calle ote.’, ‘26098345’)
Insert Into Estudiantes Values (03, ‘Hilario’, ‘Urrutia’, ‘Final calle el progreso’, ‘29078341’)
Insert Into Estudiantes Values (04, ‘José’, ‘Quezada’, ‘Mejicanos’, ‘23456895’)
Insert Into Estudiantes Values (05, ‘Adriana’, ‘Urrutia’, ‘San Jacinto’, ‘22204789’)

Ahora agregamos algunas materias…

Insert Into Materias Values(111, ‘Base de Datos II’)
Inset Into Materias Values(114, ‘Ingeniería del Software’)
Insert Into Materias Values(115, ‘SQL Server’)

Ahora algunos registros de notas…

Insert Into Notas Values (01, 111, 7)
Insert Into Notas Values (01, 115, 6.0)
Insert Into Notas Values (01, 115, 4)
Insert Into Notas Values (02, 111, 6)
Insert Into Notas Values (02, 114, 10)
Insert Into Notas Values (02, 115, 8.0)

Ahora, con la base creada y con registros en ella podemos modificar lo que queramos…

por ejemplo, borrar los registros de notas que correspondan a la materia ‘Base de Datos II’:

Delete From notas Where IdMateria = 111

Modificarle a 9.0 la nota a Oscar Mejía para la materia ‘Sql Server’:

Update notas Set nota = 9.0 Where IdEstudiante = 02 and IdMateria = 115

Modificar el nombre de la materia ‘Ingeniería del Software’ a ‘Desarrollo de Software:

Update Materias Set Materia = ‘Desarrollo del Software’ Where Materia = ‘Ingeniería del Software’

Borrar a los estudiantes que tengan apellido ‘Urrutia’:

Delete From Estudiantes Where Apellidos = ‘Urrutia’

Mostrar a todos los estudiantes:

Select * From Estudiantes

Mostrar el apellido y la dirección del estudiante 01

Select Apellidos, Direccion From Estudiantes Where IdEstudiante = 01

Seleccionar el código de materia, el nombre de materia y la nota de las materias que cursa el estudiante 02, (Este inner join esta bueno para los que nunca han consultado dos tablas a la vez).

Select Materias.IdMateria, Materias.Materia, Notas.Nota From Materias inner join Notas on Materias.IdMateria = Notas.IdMateria Where Notas.IdEstudiante = 02

Muestra la nota media de cada estudiante para las materias que cursa.

Select IdEstudiante, AVG(Nota) From Notas Group By IdEstudiante

bueno… espero que les sirva para crear bases de datos más grandes, completas y funcionales.

Creo que siempre es bueno saber como hacer las cosas a pie, es decir, con código, porque los nuevos lenguajes tratan de acostumbrar a los nuevos programadores a trabajar con los asistentes, cosa que no considero que este bién, es bueno conocer las herramientas, utilizarlas hasta cierto punto, pero no hay nada mejor que crear tu propio código sin que el sistema te diga como o con que elementos crearlo, sobre todo con sistemas de Micro$oft…

Saludos…


7 Responses to “Transact Sql Básico – Crear una Base de Datos con llaves primarias y relaciones en SQL-Server 2005”


  1. octubre 4, 2009 a las 2:56 pm

    hola es una buena informacion sobre la creacion de tablas y campos con cada atributo pero lo que quisiera saber es sobre la creacion de base de datos con los archivos mdf, ldf,y ndf bueno yo se mas o menos pero no se si estara bien bueno:
    empezamos asi:
    CREATE DATABASE VENTAS
    ON PRIMARY
    (NAME=’ALUMNO_DATA’
    FILENAME=’C:/BD_ALUMNO_DATA.MDF’,
    SIZE=3MB,
    MAXSIZE=5MB,
    FILEGROWTH=1MB)

    LOG ON
    (NAME=’ALUMNO_DATA_LOG’,
    FILENAME=’C:/DB_ALUMNO_DATA.LDF’,
    SIZE=3MB,
    MAXSIZE=5MB,
    FILEGROWTH=1MB)

    ON

    (NAME=’ALUMNO_NADA’,
    FILENAME=’C:/DB_ALUMNO_DATA.NDF’,
    SIZE=3MB,
    MAXSIZE=5MB,
    FILEGROWTH=1MB)

    • 2 Axl_505
      octubre 5, 2009 a las 9:30 am

      Bueno gracias por tu comentario, bueno, es excelente la observación de definir los archivos de datos y log de la base, creo que tomaré tu idea y acatualizaré la entrada, Veo que en tu código tomas en cuenta la creación del archivo primario y secundario de datos y el log de transacciones, solo una observación, asigna los nombres de acuerdo a la base que estas creando, que si la base es Ventas que los archivos se llamen Ventas_Data, Ventas_Log, etc, porque me ha pasado que luego me confundo todo jejejjje, la verdad tu código esta muy bién, porque uno casi siempre crea solo uno de datos y un log, se olvida del secundario de data, espera pronto dos entradas nuevas de transact, la de Triggers y la de Stored Procedures….. Saludos amigo…

  2. octubre 6, 2009 a las 1:01 pm

    Buen articulo, dice lo que tiene que decir y muy claro, me ayudo mucho a aclarar dudas

  3. 5 Belen
    octubre 18, 2009 a las 2:20 pm

    Es igual de seguro crear las llaves primarias simplemente como lo mencionas?? y porque usas el tipo de dato int y no int identity para crear tu llave primaria? y veo que no incluyes al propietario “DBO.” no es necesario?

    CREATE TABLE DBO.USUARIOS (
    ID_USUARIO INT IDENTITY (1, 1) NOT NULL,
    CUSUARIO VARCHAR(80) NOT NULL,
    BACTIVO BIT NOT NULL,
    DFECHA_CONTRATO DATETIME NOT NULL,
    DFECHA_DESPIDO DATETIME NULL,
    CONSTRAINT PK_NID_USUARIO PRIMARY KEY CLUSTERED (NID_USUARIO)
    ) ON [PRIMARY]

    Ah y tienes mucha razoncon lo que le dices a AXL, hay que nombrar el .dat y .log igual que la BD, eso hace la vida mucho mas facil y organizada.

    Saludos

    • 6 Axl_505
      octubre 19, 2009 a las 8:41 am

      Ok, veo que eres muy observadora, (por tu nombre creo que eres mujer, disculpa si me equivoco)

      Respondo tus preguntas, Las llaves primarias son igual de seguras creandolas así, al menos para los usos que yo les doy a las llaves primarias, (que son un montón), van perfectas. Respecto al tipo de dato “int” y no “int identity” para mi llave primaria, es porque la base de datos la usa un sistema que genera un código numérico de alumno, no es incremental, pero el sistema hace que no sea identico, aunque sería una buena práctica serpararlas, con un volumen de 14,000 registros sería un poco tedioso y haría crecer la base si necesidad, pero es una buena práctica.
      Respecto al DBO. depende para que lo vayas a usar o con que permisos crees tu base de datos, ya que si solo tienes permiso a la base de datos en la que trabajas si debes ponerlo, porque sino las cosas que crees no serán dbo.tabla sinó belen.tabla, creo que es mas por la costumbre de trabajar con los poderes de sysadmin en el servidor sql que no la pongo, al hacerla así automáticamente forma parte de dbo. pero no le hace mal especificarlo….

      Saludos Belen y gracias por tus observaciones….

  4. 7 FABIAN V.O
    noviembre 11, 2009 a las 2:04 pm

    Excelente la informacion, gracias me ayudo muchooo


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: