1.5. Definicion de la base de datos relacional BDUOC

Veamos cómo se crearía la base de datos BDUOC, utilizando, por ejemplo, un SGBD relacional que disponga de la sentencia CREATE DATABASE:

CREATE DATABASE bduoc;
CREATE TABLE clientes
  (codigo_cli INTEGER,
  nombre_cli CHAR(30) NOT NULL,
  nif CHAR (12),
  direccion CHAR (30),
  ciudad CHAR (20),
  telefono CHAR (12),
  PRIMARY KEY (codigo_cli),
  UNIQUE(nif)
);
CREATE TABLE departamentos
  (nombre_dep CHAR(20) PRIMARY KEY,*   * Tenemos que
  ciudad_dep CHAR(20),                  elegir restricción
  telefono INTEGER DEFAULT NULL,        de tabla porque la
  PRIMARY KEY (nombre_dep, ciudad_dep)  clave primaria
);                                      está compuesta por
                                       más de un atributo.
CREATE TABLE proyectos
  (codigo_proyec INTEGER,
  nombre_proyec CHAR(20),
  precio REAL,
  fecha_inicio DATE,
  fecha_prev_fin DATE,
  fecha_fin DATE DEFAULT NULL,
  codigo_cliente INTEGER,
  PRIMARY KEY (codigo_proyec),
  FOREIGN KEY codigo_cliente REFERENCES clientes (codigo_cli),
  CHECK (fecha_inicio < fecha_prev_fin),
  CHECK (fecha_inicio < fecha_fin)
);
CREATE TABLE empleados
(codigo_empl INTEGER,
  nombre_empl CHAR (20),
  apellido_empl CHAR(20),
  sueldo REAL CHECK (sueldo > 7000),
  nombre_dep CHAR(20)
  ciudad_dep CHAR(20),
  num_proyec INTEGER,
  PRIMARY KEY (codigo_empl),
  FOREIGN KEY (nombre_dep, ciudad_dep) REFERENCES
  departamentos (nombre_dep, ciudad_dep),
  FOREIGN KEY (num_proyec) REFERENCES proyectos (codigo_proyec)
);
COMMIT;

Al crear una tabla vemos que muchas restricciones se pueden imponer de dos formas: como restricciones de columna o como restricciones de tabla. Por ejem- plo, cuando queremos decir cuál es la clave primaria de una tabla, tenemos las dos posibilidades. Esto se debe a la flexibilidad del SQL:

•    En el caso de que la restricción haga referencia a un solo atributo, podemos elegir la posibilidad que más nos guste.

•    En el caso de la tabla departamentos, tenemos que elegir por fuerza la op- ción de restricciones de tabla, porque la clave primaria está compuesta por más de un atributo.

En general, lo pondremos todo como restricciones de tabla, excepto NOT NULL y CHECK cuando haga referencia a una sola columna.