Las
tablas son la estructura básica donde se almacena la información en la base de
datos. Dado que en la mayoría de los casos, no hay forma de que el proveedor de
base de datos sepa con antelación cuáles son sus necesidades de almacenamiento
de datos. Muchas herramientas de base de datos le permiten crear tablas sin
ingresar SQL, pero debido a que las tablas son los contenedores de toda la
información, es importante incluir la sintaxis CREATE TABLE en
esta guía de referencia.
Antes
de sumergirnos en la sintaxis SQL para CREATE TABLE, es una buena
idea comprender lo que se incluye en una tabla. Las tablas se dividen en filas
y columnas. Cada fila representa una parte de los datos, y cada columna puede
pensarse como la representación de un componente de aquella parte de los datos.
Entonces, por ejemplo, si tenemos una tabla para registrar la información del
cliente, las columnas pueden incluir información tal como Primer Nombre,
Apellido, Dirección, Ciudad, País, Fecha de Nacimiento y demás. Como resultado,
cuando especificamos una tabla, incluimos los títulos de columna y los tipos de
datos para esta columna en particular.
Entonces
¿Qué son los tipos de datos? Generalmente, los datos se generan en formas
variadas. Podría ser un entero (tal como 1), un número real (tal como 0,55),
una línea (tal como 'sql'), una fecha/expresión de tiempo (tal como
'25-ene-2000 03:22:22'), o incluso en formato binario. Cuando especificamos una
tabla, necesitamos especificar el tipo de dato asociado con cada columna (es
decir, especificaremos que ‘First_Name’ es de char(50) tipo – lo que significa
que es una línea con 50 caracteres). Una cosa a tener en cuenta es que las
diferentes bases de datos relacionales permiten diferentes tipos de datos,
entonces es prudente consultar primero una referencia específica de base de
datos.
La
sintaxis SQL para CREATE TABLE es
CREATE TABLE "nombre_tabla"
("columna 1" "tipo_de_datos_para_columna_1",
"columna 2" "tipo_de_datos_para_columna_2",
... );
Entonces,
si debemos crear una tabla para cliente tal como se especifica
anteriormente, ingresaríamos
CREATE TABLE CLIENTE
(ID_CLIENTE(5) PRIMARY KEY,
NOMBRE VARCHAR2(25)NOT NULL,
DIRECCION VARCHAR2(25)NOT NULL,
TELEF NUMBER(15)NOT NULL,
LIM_CRED VARCHAR2(25)NOT NULL);
Restricciones
Puede
colocar restricciones para limitar el tipo de dato que puede ingresarse en una
tabla. Dichas restricciones pueden especificarse cuando la tabla se crea por
primera vez a través de la instrucción CREATE TABLE, o luego de
crear la tabla a través de la instrucción ALTER TABLE.
Los
tipos comunes de restricciones incluyen las siguientes:
Cada
uno se describe en detalle a continuación.
En
forma predeterminada, una columna puede ser NULL. Si no desea permitir un valor
NULL en una columna, querrá colocar una restricción en esta columna
especificando que NULL no es ahora un valor permitido.
Por
ejemplo, en la siguiente instrucción
La
restricción UNIQUE asegura que todos los valores en una columna sean distintos.
La
restricción CHECK asegura que todos los valores en una columna cumplan ciertas
condiciones.
LLAVE PRIMARIA
La
clave primaria se utiliza para identificar en forma única cada línea en la
tabla. Puede ser parte de un registro real, o puede ser un campo artificial
(uno que no tiene nada que ver con el registro real). Una clave primaria puede
consistir en uno o más campos en una tabla. Cuando se utilizan múltiples campos
como clave primaria, se los denomina claves compuestas.
Las
claves primarias pueden especificarse cuando se crea la tabla (utilizando CREATE TABLE)
o cambiando la estructura existente de la tabla (utilizando ALTER TABLE).
A
continuación se presentan ejemplos para la especificación de una clave primaria
cuando se crea una tabla:
MySQL:
CREATE TABLE PROVEEDOR
(ID_PROVEEDOR(5) PRIMARY KEY,
NOMBRE VARCHAR2(25)NOT NULL,
DIRECCION VARCHAR2(25)NOT NULL,
TELEF NUMBER(15)NOT NULL,
LIM_CRED VARCHAR2(15)NOT NULL);
Oracle:
CREATE TABLE
Cliente
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
SQL Server:
CREATE TABLE
Customer
(SID integer PRIMARY KEY,
Last_Name varchar(30),
First_Name varchar(30));
A
continuación se presentan ejemplos para la especificación de una clave primaria
al modificar una tabla:
MySQL:
ALTER TABLE
Cliente ADD PRIMARY KEY (SID);
Oracle:
ALTER TABLE
Cliente ADD PRIMARY KEY (SID);
SQL Server:
ALTER TABLE
Cliente ADD PRIMARY KEY (SID);
Nota:
Antes de utilizar el comando ALTER TABLE para agregar una
clave primaria, necesitará asegurarse de que el campo esté definido como 'NOT
NULL' -- en otras palabras, NULL no puede aceptarse como valor para ese campo.
LLAVE FORÁNEA
Una
clave externa es un campo (o campos) que señala la clave primaria de otra
tabla. El propósito de la clave externa es asegurar la integridad referencial
de los datos. En otras palabras, sólo se permiten los valores que se esperan
que aparezcan en la base de datos.
Por
ejemplo, digamos que tenemos dos tablas, una tabla CLIENTE que
incluye todos los datos del CLIENTE, y la tabla ORDERS que
incluye los pedidos del CLIENTE. La restricción aquí es que
todos los pedidos deben asociarse con un CLIENTE que ya
se encuentra en la tabla CLIENTE. En este caso, colocaremos
una clave externa en la tabla ORDERS y la
relacionaremos con la clave primaria de la tabla CLIENTE. De
esta forma, nos aseguramos que todos los pedidos en la tabla ORDERS estén
relacionadas con un CLIENTE en la tabla CLIENTE.
En otras palabras, la tabla ORDERS no puede contener
información de un CLIENTE que no se encuentre en la
tabla CLIENTE.
La
estructura de estas dos tablas será la siguiente:
Tabla CLIENTE
Nombre de Columna
|
Característica
|
SID
|
llave Primaria
|
Last_Name
|
|
First_Name
|
Tabla ORDERS
Nombre de Columna
|
Característica
|
Order_ID
|
llave Primaria
|
Order_Date
|
|
Cliente_SID
|
llave Foránea
|
Amount
|
En
el ejemplo anterior, la columna Customer_SID en la tabla ORDERS es
una clave externa señalando la columna SID en la tabla CLIENTE.
A
continuación se muestran ejemplos de cómo especificar la clave externa a la
hora de crear la tabla ORDERS:
MySQL:
CREATE TABLE
ORDERS
(Order_ID integer,
Order_Date date,
CLIENTE_SID integer,
Amount double,
PRIMARY KEY (Order_ID),
FOREIGN KEY (Cliente_SID) REFERENCES CLIENTE (SID));
Oracle:
CREATE TABLE
ORDERS
(Order_ID integer PRIMARY KEY,
Order_Date date,
Cliente_SID integer REFERENCES CLIENTE (SID),
Amount double);
SQL Server:
CREATE TABLE
ORDERS
(Order_ID integer PRIMARY KEY,
Order_Date datetime,
CLIENTE_SID integer REFERENCES CLIENTE(SID),
Amount double);
A
continuación se presentan ejemplos para la especificación de una clave externa
al modificar una tabla: Esto asume que se ha creado la tabla ORDERS,
y que la clave externa todavía no se ha ingresado:
MySQL:
ALTER TABLE
ORDERS
ADD FOREIGN KEY (Customer_SID) REFERENCES CLIENTE (SID);
Oracle:
ALTER TABLE
ORDERS
ADD (CONSTRAINT fk_orders1) FOREIGN KEY (Cliente_SID) REFERENCES CLIENTE (SID);
SQL Server:
ALTER TABLE
ORDERS
ADD FOREIGN KEY (Customer_SID) REFERENCES CLIENTE (SID);
Restricciones FOREIGN KEY
Una tabla soporta
restricciones de claves foráneas.
NOT NULL: Significa que la columna no puede tener valores nulos.
DEFAULT: Le proporcionamos a una columna un valor por defecto cuando el valor de la columna no se especifica en la cláusula INSERT.
DEFAULT: Le proporcionamos a una columna un valor por defecto cuando el valor de la columna no se especifica en la cláusula INSERT.
En la especificación DEFAULT es posible incluir varias expresiones:
constantes, funciones SQL y variables UID y SYSDATE.
Verificación de restricciones: CHECK: Actúa como una cláusula where.
Puede hacer referencia a una o más columnas, pero no a valores de otras
filas.
En una cláusula CHECK no se pueden incluir subconsultas ni las
pseudoconsultas SYSDATE, UID y USER.
Nota: La
restricción NOT NULL es similar a CHECK (NOMBRE_COLUMNA IS NOT NULL)
UNIQUE: Evita valores repetidos en la misma columna. Puede contener una o
varias columnas. Es similar a la restricción PRIMARY KEY, salvo que son
posibles varias columnas UNIQUE definidas en una tabla. Admite valores NULL. Al
igual que en PRIMARY KEY, cuando se define una restricción UNIQUE se crea un
índice automáticamente.
CREATE TABLE TRAMO
(ID_TRAMO VARCHAR2(10) PRIMARY KEY,
NOMB_TRAMO VARCHAR2(30) NOT NULL,
PRIN_TRAM VARCHAR2(30) NOT NULL,
FIN_TRAM VARCHAR2(30) NOT NULL,
KM_CONCLUYE VARCHAR2(10) NOT NULL,
ID_CARRETERA VARCHAR2(10)
CONSTRAINT TRAMO_ID_CARRETERA_FK
REFERENCES CARRETERA(ID_CARRETERA),
ID_COMUNA VARCHAR2(10));
.jpg)
No hay comentarios:
Publicar un comentario