Tienda Online Relacional

En esta página mostramos

  • el esquema relacional de base de datos,
  • las órdenes SQL de creación de las tablas
  • copias de respaldo para replicar esta BD y la de Ejemplo —usada en las lecciones SQL—

Esquema relacional de base datos

provincia (
codp varchar(2),
nombre varchar(25) )
CP (codp)

localidad (
codm varchar(4),
pueblo varchar(50),
provincia varchar(2))
CP (codm,provincia)
CAj (provincia) —> provincia
VNN (pueblo)

usuario (
email varchar(50),
nombre varchar(35),
apellidos varchar(55),
dni varchar(12),
telefono varchar(15),
calle varchar(45),
calle2 varchar(45),
codpos varchar(5),
pueblo varchar(4),
provincia varchar(2),
nacido date)
CP (email)
CAlt (dni)
CAj (pueblo, provincia) —> localidad VNN 
VNN (apellidos)
VNN (nombre)

direnvio (
email varchar(50),
calle varchar(45),
calle2 varchar(45),
codpos varchar(5),
pueblo varchar(4),
provincia varchar(2))
CP (email)
CAj (pueblo, provincia) —> localidad VNN 
CAj (email) —> usuario


marca (
marca varchar(15),
empresa varchar(60),
logo blob )
CP (marca)

articulo (
cod varchar(7),
nombre varchar(45),
pvp decimal(7,2),
marca varchar(15),
imagen blob,
urlimagen varchar(100),
especificaciones text)
CP (cod)
CAj (marca) —> marca

camara (
cod varchar(7),
resolucion varchar(15),
sensor varchar(45),
tipo varchar(45),
factor varchar(10),
objetivo varchar(15),
pantalla varchar(20),
zoom varchar(40))
CP (cod)
CAj (cod) —> articulo

tv (
cod varchar(7),
panel varchar(45),
pantalla smallint(6),
resolucion varchar(15),
hdreadyfullhd varchar(6),
tdt tinyint(1) )
CP (cod)
CAj (cod) —> articulo

memoria (
cod varchar(7),
tipo varchar(30) )
CP (cod)
CAj (cod) —> articulo

objetivo (
cod varchar(7),
tipo varchar(15),
montura varchar(15),
focal varchar(10),
apertura varchar(10),
especiales varchar(35) )
CP (cod)
CAj (cod) —> articulo
pack (
cod varchar(7) )
CP (cod)
CAj (cod) —> articulo

ptienea (
pack varchar(7),
articulo varchar(7))
CP (pack,articulo)
CAj (articulo) —> articulo 
CAj (pack) —> pack

stock (
articulo varchar(7),
disponible int(11),
entrega set( 'Descatalogado', 'Próximamente', '24 horas', '3/4 días', '1/2 semanas' ) )
CP (articulo)
CAj (articulo) —> articulo 

cesta (
articulo varchar(7),
usuario varchar(50),
fecha datetime )
CP (articulo,usuario)
CAj (articulo) —> articulo
CAj (usuario) —> usuario

pedido (
numPedido int(11),
usuario varchar(50),
fecha datetime ) 
CP (numPedido)
CAj (usuario) —> usuario VNN 
VNN (fecha)

linped (
numPedido int(11),
linea int(11),
articulo varchar(7),
importe decimal(9,2),
cantidad int(11) )
CP (linea,numPedido)
CAj (articulo) —> articulo VNN 
CAj (numPedido) —> pedido
VNN (importe)

Ordenes de creación de las tablas

DROP TABLE IF EXISTS provincia;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE provincia (
  codp varchar(2) NOT NULL,
  nombre varchar(25) NOT NULL,
  PRIMARY KEY  (codp)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS localidad;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE localidad (
  codm varchar(4) NOT NULL,
  pueblo varchar(50) NOT NULL,
  provincia varchar(2) NOT NULL,
  PRIMARY KEY  (codm,provincia),
  KEY fk_LOCALIDAD_PROVINCIA (provincia),
  CONSTRAINT fk_LOCALIDAD_PROVINCIA FOREIGN KEY (provincia) REFERENCES provincia (codp) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS usuario;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE usuario (
  email varchar(50) NOT NULL,
  nombre varchar(35) NOT NULL,
  apellidos varchar(55) NOT NULL,
  dni varchar(12) NOT NULL,
  telefono varchar(15) default NULL,
  calle varchar(45) default NULL,
  calle2 varchar(45) default NULL,
  codpos varchar(5) default NULL,
  pueblo varchar(4) NOT NULL,
  provincia varchar(2) NOT NULL,
  nacido date,
  PRIMARY KEY  (email),
  UNIQUE KEY dni_UNIQUE (dni),
  KEY fk_USUARIO_LOCALIDAD (pueblo,provincia),
  CONSTRAINT fk_USUARIO_LOCALIDAD FOREIGN KEY (pueblo, provincia) REFERENCES localidad (codm, provincia) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS direnvio;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE direnvio (
  email varchar(50) NOT NULL,
  calle varchar(45) default NULL,
  calle2 varchar(45) default NULL,
  codpos varchar(5) default NULL,
  pueblo varchar(4) NOT NULL,
  provincia varchar(2) NOT NULL,
  PRIMARY KEY  (email),
  KEY fk_DIRENVIO_LOCALIDAD (pueblo,provincia),
  KEY fk_DIRENVIO_USUARIO (email),
  CONSTRAINT fk_DIRENVIO_LOCALIDAD FOREIGN KEY (pueblo, provincia) REFERENCES localidad (codm, provincia) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT fk_DIRENVIO_USUARIO FOREIGN KEY (email) REFERENCES usuario (email) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS marca;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE marca (
  marca varchar(15) NOT NULL,
  empresa varchar(60) default NULL,
  logo blob,
  PRIMARY KEY  (marca)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS articulo;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE articulo (
  cod varchar(7) NOT NULL,
  nombre varchar(45) default NULL,
  pvp varchar(45) default NULL,
  marca varchar(15) default NULL,
  imagen blob,
  urlimagen varchar(100) default NULL,
  especificaciones text,
  PRIMARY KEY  (cod),
  KEY fk_ARTICULO_MARCA (marca),
  CONSTRAINT fk_ARTICULO_MARCA FOREIGN KEY (marca) REFERENCES marca (marca) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS camara;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE camara (
  cod varchar(7) NOT NULL,
  resolucion varchar(15) default NULL,
  sensor varchar(45) default NULL,
  tipo varchar(45) default NULL,
  factor varchar(10) default NULL,
  objetivo varchar(15) default NULL,
  pantalla varchar(20) default NULL,
  zoom varchar(40) default NULL,
  PRIMARY KEY  (cod),
  KEY fkcamara2articulo (cod),
  CONSTRAINT fkcamara2articulo FOREIGN KEY (cod) REFERENCES articulo (cod) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS memoria;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE memoria (
  cod varchar(7) NOT NULL,
  PRIMARY KEY  (cod),
  KEY fkcamara2articulo (cod),
  CONSTRAINT fkmemoria2articulo FOREIGN KEY (cod) REFERENCES articulo (cod) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS objetivo;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE objetivo (
  cod varchar(7) NOT NULL,
  tipo varchar(15) default NULL,
  montura varchar(15) default NULL,
  focal varchar(10) default NULL,
  apertura varchar(10) default NULL,
  especiales varchar(35) default NULL,
  PRIMARY KEY  (cod),
  CONSTRAINT fk_objetivo2articulo FOREIGN KEY (cod) REFERENCES articulo (cod) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS tv;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE tv (
  cod varchar(7) NOT NULL,
  panel varchar(45) default NULL,
  pantalla smallint(6) default NULL,
  resolucion varchar(15) default NULL,
  hdreadyfullhd varchar(6) default NULL,
  tdt tinyint(1) default NULL,
  PRIMARY KEY  (cod),
  KEY fkcamara2articulo (cod),
  CONSTRAINT fktv2articulo FOREIGN KEY (cod) REFERENCES articulo (cod) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS pack;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE pack (
  cod varchar(7) NOT NULL,
  PRIMARY KEY  (cod),
  KEY fkpack (cod),
  CONSTRAINT fkpack2articulo FOREIGN KEY (cod) REFERENCES articulo (cod) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS ptienea;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE ptienea (
  pack varchar(7) NOT NULL,
  articulo varchar(7) NOT NULL,
  PRIMARY KEY  (pack,articulo),
  KEY fkaarticulo (articulo),
  CONSTRAINT fkaarticulo FOREIGN KEY (articulo) REFERENCES articulo (cod) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT fkapack FOREIGN KEY (pack) REFERENCES pack (cod) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS stock;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE stock (
  articulo varchar(7) NOT NULL,
  disponible int(11) default NULL,
  entrega set('Descatalogado','Próximamente','24 horas','3/4 días','1/2 semanas') default NULL,
  PRIMARY KEY  (articulo),
  KEY fk_ARTICULO_ARTICULO1 (articulo),
  CONSTRAINT fk_stock2articulo FOREIGN KEY (articulo) REFERENCES articulo (cod) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS cesta;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE cesta (
  articulo varchar(7) NOT NULL,
  usuario varchar(50) NOT NULL,
  fecha datetime default NULL,
  PRIMARY KEY  (articulo,usuario),
  KEY fk_CESTA_ARTICULO (articulo),
  KEY fk_CESTA_USUARIO (usuario),
  CONSTRAINT fk_CESTA_ARTICULO FOREIGN KEY (articulo) REFERENCES articulo (cod) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT fk_CESTA_USUARIO FOREIGN KEY (usuario) REFERENCES usuario (email) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS pedido;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE pedido (
  numPedido int(11) NOT NULL,
  usuario varchar(50) NOT NULL,
  fecha datetime NOT NULL,
  PRIMARY KEY  (numPedido),
  KEY fk_PEDIDO_USUARIO (usuario),
  CONSTRAINT fk_PEDIDO_USUARIO FOREIGN KEY (usuario) REFERENCES usuario (email) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;


DROP TABLE IF EXISTS linped;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE linped (
  numPedido int(11) NOT NULL,
  linea int(11) NOT NULL,
  articulo varchar(7) NOT NULL,
  importe decimal(9,2) NOT NULL,
  cantidad int(11) default NULL,
  PRIMARY KEY  (linea,numPedido),
  KEY fk_LINPED_PEDIDO (numPedido),
  KEY fk_LINPED_ARTICULO (articulo),
  CONSTRAINT fk_LINPED_ARTICULO FOREIGN KEY (articulo) REFERENCES articulo (cod) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT fk_LINPED_PEDIDO FOREIGN KEY (numPedido) REFERENCES pedido (numPedido) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;

Importación de copia de respaldo

En las copias de respaldo se incluye la creación de tablas y la inserción de filas de tal forma que se obtiene una copia exacta de la base de datos usada en prácticas de FBD.

Suponemos que se dispone de un servidor MySQL ejecutándose en localhost.

Los enlaces contienen un fichero de texto (.sql) con codificación de caracteres UTF-8. Dependiendo del sistema operativo y el servidor y el cliente de MySQL, es posible que se deba convertir a otra codificación de caracteres si se quiere mantener acentos y demás caracteres regionales —el bloc de notas permite guardar como en diferentes codificaciones—.

Descárgate el volcado en SQL de la base de datos Tienda On Line. También puedes descargarte el de la base de datos Ejemplo. Son copias de respaldo de 31 de enero de 2013

Creación de la base de datos

Opción A

    1. Por línea de comando, se necesita que el ejecutable mysql pueda invocarse desde la ruta en la que se abre el terminal.
    2. Extraer tol.sql del comprimido y ubicarlo en esa misma ruta.
    3. Ejecutar mysql -u xxx -pyyy (xxx es un usuario con permisos para crear bases de datos y tablas, se le supone contraseña yyy)
    4. Ejecutar \. ToL20130131.sql

Opción B

    1. Desde HeidiSQL, o cualquier otro cliente, conectado con un usuario con permisos en tu MySQL (localhost:3306) para crear bases de datos y tablas.
    2. Editar ToL20130131.sql en el propio HeidiSQL, o copiar-pegar su contenido, y ejecutar

Nota importante: el fichero está codificado en UTF-8. Dependiendo del sistema y cliente que se utilicen podría ser necesario traducirlo a otra codificación para leer correctamente los caracteres propios de nuestro idioma. En MS Windows se puede hacer fácil con el bloc de notas.