CREATE TABLE es la sentencia SQL para crear las diferentes tablas que conformarán nuestras bases de datos relacionales. Una tabla se divide en filas y columnas y permite almacenar datos y relacionarlos con otras tablas a través de claves Foreign Key.
La sentencia CREATE TABLE permite definir por tanto los campos que harán referencia a las columnas de la tabla junto al tipo de dato correspondiente, así como las restricciones pertinentes, ya sea la definición de la Primary Key para identificar única e inequívocamente a cada registro y las Foreign Key para establecer relaciones con otras tablas del modelo, por citar algunos ejemplos.
En resumen, la estructura del CREATE TABLE se define de la siguiente manera:
CREATE TABLE nombreTabla (nombreCampo tipo de dato y propiedades) CONSTRAINT (restricciones)
Para entender mejor el funcionamiento del CREATE TABLE, vamos a escribir y explicar las sentencias de la creación de dos nuevas tablas (Clientes y Pedidos) en nuestra base de datos.
Ejemplo
CREATE TABLE Clientes(
idClientes INT IDENTITY(1,1),
nombre VARCHAR(255) NOT NULL,
apellidos VARCHAR(255) NOT NULL,
direccion VARCHAR(255),
cuenta INT,
CONSTRAINT pk_clientes_idClientes PRIMARY KEY (idClientes)
);
De dicha sentencia sacamos las siguientes conclusiones:
-
El campo
idClienteses de tipoINT, es decir, solo admite valores numéricos enteros y la propiedadIDENTITY (1,1)nos indica que el valor de dicho campo irá progresando secuencialmente de uno en uno a medida que vamos añadiendo datos, empezando desde el uno. Además, en elCONSTRAINTse define aidClientescomo la clave Primary Key de la tabla. -
Los campos
nombre,apellidosydireccionadmiten valores alfanuméricos hasta una longitud máxima de 255 caracteres. Los dos primeros;nombreyapellidos; comparten la propiedadNOT NULLpor lo que no admitirán valores nulos, teniendo que estar siempre informados para cada registro. -
El campo
cuentaes de tipoINT, el cual admite valores numéricos y al no indicarle propiedad, admite nulos. -
En el
CONSTRAINTse define nombre propio a la Primary Key:pk_clientes_idClientespara identificarla más fácilmente.
CREATE TABLE Pedidos(
idPedidos INT IDENTITY(1,1),
producto VARCHAR(255),
descripcionProducto VARCHAR(255),
precio FLOAT,
fechaPedido DATE,
numeroProductos INT DEFAULT(0),
totalPrecio AS precio * numeroProductos,
idClientes INT,
CONSTRAINT pk_pedidos_idPedidos PRIMARY KEY(idPedidos),
CONSTRAINT uq_pedidos_producto UNIQUE (producto),
CONSTRAINT fk_clientes_pedidos FOREIGN KEY (idClientes) REFERENCES Clientes(idClientes)
);
De dicha sentencia sacamos las siguientes conclusiones:
-
El campo
idPedidoses de tipo entero y tiene la propiedadIDENTITY (1,1)por lo que irá progresando secuencialmente de uno en uno por cada registro. Además, dicho campo está definido en elCONSTRAINTcomo Primary Key. -
Los campos
productoydescripcionProductoson de tipoVARCHAR, por lo que admiten valores alfanuméricos de hasta 255 caracteres cada uno. -
El campo
precioes de tipoFLOAT, lo cual admite valores numéricos con decimales. -
El campo
fechaPedidoes de tipoDATE, para registrar formato fechas. El formato por defecto podrá ser modificado con diferentes máscaras de entrada para ajustarlo a las necesidades requeridas. -
El campo
numeroProductoses de tipoINT, por lo que solo admitirá valores numéricos enteros. La propiedadDEFAULTindica un valor por defecto, en este caso 0. -
El campo
totalPrecioes el resultado de una operación aritmética del resultado de la multiplicación de los valores de los camposprecioynumeroProductos -
En el
CONSTRAINTse define al campoidPedidoscomo Primary Key y a dicha clave se le asigna el nombre propio:pk_pedidos_idPedidos -
En el
CONSTRAINTse define al campoproductocomo Unique Key y a dicha clave se le asigna el nombre propio:uq_pedidos_produto -
En el
CONSTRAINTse establece la relación entre ambas tablas (ClientesyPedidos) a través de la Foreign Key (idClientes) definida en la tablaPedidos. Además, a dicha clave se le asigna el nombre:fk_clientes_pedidos