Friday, April 6, 2012

Cómo implementar una base De datos: 2do paso

Como segundo paso, viene la creación de las tablas de la base de datos: "CREATE TABLE".

Es importante resaltar que la creación de las tablas se debe hacer en orden. Más que todo en las relaciones 1 a N. Por ejemplo, 1 cliente realiza N ventas. No podemos crear primero la tabla "ventas" sin haber creado antes la de "cliente" Por tanto, las tablas que no tienen llave foránea deben crearse primero.

La sentencia CREATE TABLE con todos sus atributos sería como sigue:

CREATE TABLE nombre_table
(
 campo1 tipo_dato [NULL/NOT NULL] | [CHECK (expresion_logica)] | [DEFAULT expresion_constante] | [aqui podemos agregar si va a ser primary o foreign key],
 ...
 PRIMARY KEY (campo_llave_pk),
 FOREIGN KEY (campo_llave_fk) REFERENCES nombre_tabla2 (campo_llave_pk_tabla2)
)
Ejemplo. Creación de las tablas para una base de datos de Ventas (sencilla para fines académicos)

CREATE TABLE cliente(
 id int identity(1,1) primary key, --cuando es llave primaria, automáticamente es NOT NULL
 nombre varchar(20) not null,
 ap_pat varchar(20) not null,
 ap_mat varchar(20) null, --si no se especifica que sea NULL, el DBMS lo pone por defecto.
 direccion varchar(30) null,
 sexo char(1) CHECK (sexo in('M','F')),
 limite_credito decimal(10,2) not null
)

CREATE TABLE vendedor(
 id int identity(1,1) primary key,
 nombre varchar(20) not null,
 ap_pat varchar(20) not null,
 ap_mat varchar(20) null, 
 direccion varchar(30) null,
 sexo char(1) CHECK (sexo in('M','F'))
)

CREATE TABLE producto(
 id int identity(1,1) primary key,
 descripcion varchar(50) not null,
 precio decimal(10,2) not null,
 stock int not null
)

CREATE TABLE ventas(
 id int identity(1,1) primary key,
 fecha datetime not null,
 descuento decimal(10,2) default 0,
 id_cliente int foreign key references cliente(id),
 id_vendedor int foreign key references vendedor(id)
)

CREATE TABLE ventas_detalle(
 id int identity(1,1) primary key,
 cantidad int check (cantidad >0),
 id_producto int foreign key references producto(id),
 id_venta int foreign key references ventas(id)
)

Una vez creadas las tablas, podría darse el caso de que querramos eliminar alguna o modificarla.

Para eliminar una tabla: DROP TABLE

Practicamente, podemos darle un DROP a todo lo que le hayamos dado un CREATE (table, trigger, view, etc.)

Ejemplo:

DROP TABLE venta_detalle

Para modificar una tabla: ALTER TABLE

Podemos agregar una nueva columna a una tabla, eliminar una columna existente de la tabla o modificar una collumna existente de tabla.

1. Añadir una definición de la columna de una tabla. Puede crearse con valores nulos o valores.

ALTER TABLE nombre_tabla ADD nombre_columna_nueva tipo_dato [NULL] | [CONSTRAINT nombre_nueva_restriccion CHECK/DEFAULT]

2. Eliminar una columna de la tabla. Pero antes de su eliminación deben ser eliminados por ALTER TABLE todas las restricciones que estén definidas sobre esta solumna.

ALTER TABLE nombre_table DROP COLUMN nombre_columna

3. Eliminar un constraint.

ALTER TABLE nombre_table DROP CONSTRAINT nombre_del_constraint

4. Crear una llave primaria. En el caso de que esta tabla ya contenga datos, las columnas que escojamos para la llave primaria deben ser de valor únicos por cada fila.

ALTER TABLE nombre_table ADD PRIMARY KEY (key1, key2...)

5. Crear una llave foránea. La columna a definir como llave foránea debe contener previamente valores que corresponden a la llave primaria de la otra tabla.

ALTER TABLE nombre_table ADD FOREIGN KEY (key)

6. Habilitar o inhabilitar los trigger en una tabla.

ALTER TABLE nombre_table ENABLE TRIGGER nombre_trigger

ALTER TABLE nombre_table DISABLE TRIGGER nombre_trigger

No comments:

Post a Comment