Los principales comandos que provee SQL para la definición de la estructura de los datos son:
CREATE TABLE: Para crear una tabla nueva.
Sintaxis
CREATE TABLE <nombre de la tabla> ( <campo 1> < tipo de dato> , <campo 2><tipo de dato>,…) |
CREATE INDEX: Crea un nuevo índice en la tabla indicada.
Sintaxis
CREATE INDEX <nombre del índice>
ON <tabla> (<campo1 que se indexa>, <campo2 que se indexa>….) |
ALTER TABLE: Se emplea para modificar la estructura de una tabla.
Sintaxis
ALTER TABLE <nombre de la tabla>
[ADD | ALTER | DROP] COLUMN <nombre de la columna> <tipo de dato columna> |
DROP TABLE: Para eliminar la tabla indicada
Sintaxis
DROP TABLE <nombre de la tabla> |
DROP INDEX: Elimina un índice de la tabla indicada.
Sintaxis
DROP INDEX <índice>
ON <tabla> |
Ejemplo: Generar la estructura de datos
Para practicar con los comandos de definición de la estructura, realizaremos una serie de ejercicios en Access. Seguiremos con el ejemplo de nuestro amigo Antonio y su supermercado Gades, para el que ya habíamos definido la estructura de los datos que necesitaba.
Paso 1: Creamos una base de datos.
Creamos una base de datos nueva, le ponemos el nombre que queramos, por ejemplo: ProveedoresSQL
Paso 2: Creamos un modulo:
Para ello vamos a la pestaña de “HERRAMIENTAS DE BASE DE DATOS”, pulsamos el botón “Visual Basic” y accedemos al entorno de programación en VBA. Una vez en este entorno, para generar el módulo vamoa al menú “Insertar/Módulo”
Por defecto nos creara el Módulo con el nombre “Módulo1” y será cuando lo guardemos, cuando podamos ponerle el nombre que queramos. Vamos a hacerlo ahora, para lo que cerramos la BBDD y nos aparece un cuadro de dialogo de título “Guardar como”, en el que podremos poner el nombre que queramos a nuestro recién creado módulo: podemos ponerle el nombre: “PracticasConSQL”, por ejemplo.
Paso 3: La estructura de datos
La estructura de datos que habíamos definido para el fichero de proveedores de Antonio se componía de dos tablas:
Tabla1:
- NombreProveedor
- ContactoProveedor
- Telefono
Tabla2:
- NombreProveedor
- Producto
- Precio
Estas tablas estaban relacionadas por el campo nombre de proveedor.
Vamos a hacer una pequeña mejora y a definir el tipo de datos para cada campo.
Nuestra nueva estructura quedaría:
Tabla1: Proveedores
- IdProveedor: tipo INTEGER
- NombreProveedor: tipo TEXT de 100 caracteres (equivalente a VARCHAR)
- ContactoProveedor: tipo TEXT de 100 caracteres (equivalente a VARCHAR)
- Telefono: tipo TEXT de 12 caracteres (equivalente a VARCHAR)
Tabla2: Producto
- Proveedor: tipo INTEGER
- Producto: tipo TEXT de 50 caracteres (equivalente a VARCHAR)
- Precio: tipo DOUBLE
En esta nueva estructura, la relación entre ambas tablas la crearemos entre los campos IdProveedor de Tabla1 y Proveedor de Tabla2. Además crearemos un índice con el campo IdProveedor de Tabla1
Paso 4: Generando nuestra estructura de datos con SQL
La sentencia SQL para crear nuestra tabla de proveedores sería:
CREATE TABLE Proveedores(idProveedor INTEGER, NombreProveedor TEXT(100), ContactoProveedor TEXT(100), Telefono TEXT(12))
Y para crear la tabla Productos:
CREATE TABLE Productos(Proveedor INTEGER, Producto TEXT(50), Precio DOUBLE)
Ahora ejecutaremos estas instrucciones SQL desde nuestro módulo de VBA. Si estuviéramos en otro gestor de bases de datos usaríamos el IDE correspondiente, y las sentencias SQL serían las mismas.
Para ejecutarlas nos crearemos un procedimiento y usaremos la instrucción DoCmd.RunSQL que nos permite ejecutar una sentencia SQL.
El procedimiento quedaría:
Sub generandoEstructura()
DoCmd.RunSQL «CREATE TABLE Proveedores(idProveedor INTEGER, NombreProveedor TEXT(100), ContactoProveedor TEXT(100), Telefono TEXT(12))»
DoCmd.RunSQL «CREATE TABLE Productos(Proveedor INTEGER, Producto TEXT(50), Precio DOUBLE)»
End Sub
Lo siguiente es ejecutar el procedimiento desde la ventana de inmediato, haciendo la siguiente llamada:
Call generandoEstructura( )
El resultado es que habremos creado en Access las dos tablas: Proveedores y Productos
Paso 5: Definiendo un índice
Finalmente, para completar nuestra estructura de datos, queremos definir un índice en la tabla Proveedores, que sea único, es decir, que no admita duplicados. Mediante dicho índice podremos identificar de manera univoca a cada proveedor.
Obviamente el campo utilizado como índice será IdProveedor, que en el fondo lo habíamos creado para este propósito.
La sentencia SQL para generar el índice sería:
CREATE UNIQUE INDEX Indice1 ON Proveedores(idProveedor)
Ojo, hay que introducir la palabra UNIQUE delante de INDEX para asegurarnos que el índice no admite duplicados. Si eliminamos UNIQUE de la sentencia, crearíamos un índice que admite duplicados y podría haber dos proveedores con el mismo identificador en este campo. Ese índice ya no nos serviría para identificar de forma univoca a un proveedor.
Bien, si introducimos esa sentencia en nuestro procedimiento nos quedaría:
Sub generandoEstructura()
DoCmd.RunSQL «CREATE TABLE Proveedores(idProveedor INTEGER, NombreProveedor TEXT(100), ContactoProveedor TEXT(100), Telefono TEXT(12))»
DoCmd.RunSQL «CREATE TABLE Productos(Proveedor INTEGER, Producto TEXT(50), Precio DOUBLE)»
DoCmd.RunSQL «CREATE UNIQUE INDEX Indice1 ON Proveedores(idProveedor)»
End Sub
Y si lo ejecutamos desde la ventana de Inmediato, con la llamada:
Call generandoEstructura( )
Obtendríamos las dos tablas deseadas con el índice sin duplicados en la tabla de Proveedores.
NOTA:
Este post es parte de la colección “Arquitectura de Datos” que reproduce los apuntes de la clase que imparto sobre el tema en ESIC. Puedes ver el índice de esta colección aquí.
Deja una respuesta