Capítulo 4: Diseño de bases de datos

Enlaces, enlaces

El valor NULL

Volver a utilizar la base de datos videoteca creada en el segundo capítulo. Insertar una nueva película:

USE videoteca;

INSERT INTO pelicula
(
  titulo,
  director
)
VALUES
(
  'Naves misteriosas',
  'Douglas Trumbull'
);

Realizar la siguiente consulta:

USE videoteca;

SELECT
  titulo,
  CONCAT(director, ', ', interprete)
FROM
  pelicula;

Evita utilizar NULL. Crea de nuevo la tabla de películas:

USE videoteca;

DROP TABLE IF EXISTS pelicula;
CREATE TABLE pelicula
(
  titulo VARCHAR(64) NOT NULL,
  director VARCHAR(128) NOT NULL,
  interprete VARCHAR(128) NOT NULL
);

Si lo deseas puedes indicar valores predeterminados:

USE videoteca;

DROP TABLE IF EXISTS pelicula;
CREATE TABLE pelicula
(
  titulo VARCHAR(64) NOT NULL,
  director VARCHAR(128) NOT NULL DEFAULT '',
  interprete VARCHAR(128) NOT NULL DEFAULT ''
);

También puedes modificar la tabla, sin necesidad de borrarla y luego volver a crearla:

USE videoteca;

DELETE FROM
  pelicula
WHERE
  titulo = 'Naves misteriosas';

ALTER TABLE pelicula
  MODIFY titulo VARCHAR(64) NOT NULL,
  MODIFY director VARCHAR(128) NOT NULL DEFAULT '',
  MODIFY interprete VARCHAR(128) NOT NULL DEFAULT '';

Claves primarias

Inserción de una nueva película:

USE videoteca;

INSERT INTO
  pelicula
VALUES
(
  'Alien',
  'James Cameron',
  'Sigourney Weaver'
);

Lista de películas, ordenadas por título:

USE videoteca;

SELECT
  *
FROM
  pelicula
ORDER BY
  titulo;

Creación de una clave primaria:

USE videoteca;

CREATE TABLE pelicula
(
  titulo VARCHAR(64) NOT NULL,
  director VARCHAR(128) NOT NULL DEFAULT '',
  interprete VARCHAR(128)NOT NULL DEFAULT '',
  PRIMARY KEY(titulo)
);

O modificación de la tabla existente:

USE videoteca;

ALTER TABLE
  pelicula
ADD PRIMARY KEY(titulo);

Antes, modifica el título de la nueva película:

USE videoteca;

UPDATE
  pelicula
SET
  titulo = 'Aliens'
WHERE
  director = 'James Cameron';

Columnas de incremento automático

Creación de una tabla con una columna de incremento automático:

USE videoteca;

CREATE TABLE pelicula
(
  id INT NOT NULL AUTO_INCREMENT,
  titulo VARCHAR(64) NOT NULL,
  director VARCHAR(128) NOT NULL DEFAULT '',
  interprete VARCHAR(128) NOT NULL DEFAULT '',
  PRIMARY KEY(id)
);

O modificación de la tabla existente:

USE videoteca;

ALTER TABLE pelicula
  DROP PRIMARY KEY,
  ADD id INT NOT NULL AUTO_INCREMENT FIRST,
  ADD PRIMARY KEY(id);

El modelo relacional

Creación de la tabla de préstamos:

USE videoteca;

DROP TABLE IF EXISTS prestamo;
CREATE TABLE prestamo
(
  id INT NOT NULL AUTO_INCREMENT,
  idpelicula INT NOT NULL,
  persona VARCHAR(128) NOT NULL,
  fecha DATE NOT NULL,
  PRIMARY KEY(id),
  FOREIGN KEY(idpelicula)
    REFERENCES pelicula(id)
);

Realizar un préstamo:

USE videoteca;

INSERT INTO prestamo
(
  idpelicula,
  persona,
  fecha
)
VALUES(
  4,
  'Kake',
  CURRENT_DATE()
);

Préstamo imposible:

USE videoteca;

INSERT INTO prestamo
(
  idpelicula,
  persona,
  fecha
)
VALUES
(
  123,
  'Germán',
  CURRENT_DATE()
);

Cambiar el tipo de la tabla de películas:

USE videoteca;

ALTER TABLE pelicula ENGINE = InnoDB;

Volver a crear la tabla de préstamos:

USE videoteca;

DROP TABLE IF EXISTS prestamo;
CREATE TABLE prestamo
(
  id INT NOT NULL AUTO_INCREMENT,
  idpelicula INT NOT NULL,
  persona VARCHAR(128) NOT NULL,
  fecha DATE NOT NULL,
  PRIMARY KEY(id),
  FOREIGN KEY(idpelicula)
    REFERENCES pelicula(id)
)
ENGINE = InnoDB;