[Php-avanzado] Tablas ClasificadosMiramar ( I`m Back !!! )

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Sab Oct 3 18:27:06 ART 2009


Hola Ezequiel,

El sáb, 26-09-2009 a las 22:48 -0300, Ezequiel Mujica escribió:
> Hola Leo,
> 
> Te paso las tablas de mi tesis para que me des el OK, no las envié
> antes porq ando complicado con laburo, y además empecé otra carrera :S

	Qué empezaste???
	Tan pronto? Ni se te ocurra dejar de invertir tiempo en esto!

> Lo único que no no corregí fue la tabla fotos, ya que la herramienta
> case si solo dejo los id de la foto y del aviso me marca un error si
> elimino las claves "extra".
> Espero tus comentarios para seguir codificando, algo he avanzado ;)
	
	Ok. Te respondo intercalado... igual me parece que algunas cosas te las
voy a estar repitiendo:

> Saludos, Ezequiel.-

CREATE TABLE provincia (
  idprovincia INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nombre VARCHAR(100) NULL,
  PRIMARY KEY(idprovincia)
)
TYPE=InnoDB;

CREATE TABLE nivelacceso (
  idnivelacceso INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nivel CHAR NULL,
  PRIMARY KEY(idnivelacceso)
)
TYPE=InnoDB;

CREATE TABLE rubro (
  idrubro INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nombre VARCHAR(80) NULL,
  destacado CHAR(1) NULL,
  imagen VARCHAR(150) NULL,
  PRIMARY KEY(idrubro)
)
TYPE=InnoDB;

CREATE TABLE xxx (
  idxxx INT NOT NULL,
  palabra VARCHAR(25) NULL,

// Dale un ancho mayor, para poder incluir alguna frase o comodines para
tratar como expresiones regulares.

  PRIMARY KEY(idxxx)
)
TYPE=InnoDB;

CREATE TABLE tipos_publicidad (
  idtipos_publicidad INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  tipo VARCHAR(5) NULL,

// Solo 5??? g-r-a-t-i-s son 6 letras y ya no cabe... ni hablar de tipo
c-o-m-e-r-c-i-o El espacio en disco es muy barato!

  PRIMARY KEY(idtipos_publicidad)
)
TYPE=InnoDB;

CREATE TABLE moneda (
  idmoneda INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  moneda VARCHAR(30) NULL,
  PRIMARY KEY(idmoneda)
)
TYPE=InnoDB;

CREATE TABLE estado_aviso (
  idestado_aviso INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  estado VARCHAR(10) NULL,
  PRIMARY KEY(idestado_aviso)
)
TYPE=InnoDB;

CREATE TABLE empresas (
  idempresa INT NOT NULL AUTO_INCREMENT,
  nombre VARCHAR(100) NOT NULL,
  domicilio VARCHAR(100) NULL,
  email VARCHAR(80) NULL,
  telefono VARCHAR(50) NULL,
  celular VARCHAR(50) NULL,
  PRIMARY KEY(idempresa)
)
TYPE=InnoDB;

CREATE TABLE usuarios_root (
  idusuarios_root INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  nivelacceso_idnivelacceso INTEGER UNSIGNED NOT NULL,
  nombre VARCHAR(100) NULL,
  apellido VARCHAR(100) NULL,
  login VARCHAR(30) NULL,
  pass VARCHAR(30) NULL,
  email VARCHAR(100) NULL,
  habilitado BOOL NULL,
  PRIMARY KEY(idusuarios_root, nivelacceso_idnivelacceso),

// Esta clave doble te va a dar varios dolores de cabeza. Por qué la
clave no es simplemente idusuarios_root??? Así los id de usuario son
únicos.

  INDEX usuarios_root_FKIndex1(nivelacceso_idnivelacceso),
  FOREIGN KEY(nivelacceso_idnivelacceso)
    REFERENCES nivelacceso(idnivelacceso)
      ON DELETE NO ACTION
      ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE localidad (
  idlocalidad INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  provincia_idprovincia INTEGER UNSIGNED NOT NULL,
  nombre VARCHAR(80) NULL,
  codpostal VARCHAR(10) NULL,
  PRIMARY KEY(idlocalidad),
  INDEX localidad_FKIndex1(provincia_idprovincia),
  FOREIGN KEY(provincia_idprovincia)
    REFERENCES provincia(idprovincia)
      ON DELETE NO ACTION
      ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE publicidad (
  idpublicidad INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  rubro_idrubro INTEGER UNSIGNED NOT NULL,
  empresas_idempresa INT NOT NULL,
  tipos_publicidad_idtipos_publicidad INTEGER UNSIGNED NOT NULL,
  nombre VARCHAR(100) NULL,
  largo SMALLINT UNSIGNED NULL,
  ancho SMALLINT UNSIGNED NULL,

// Que largo y ancho se limiten solo a 256 suena a muy poco... supongo
que ahí irá una medida en píxeles.

  url VARCHAR(100) NULL,
  path VARCHAR(100) NULL,
  ubicacion VARCHAR(30) NULL,
  impresiones INTEGER UNSIGNED NULL,
  clics INTEGER UNSIGNED NULL,
  PRIMARY KEY(idpublicidad, rubro_idrubro, empresas_idempresa,
tipos_publicidad_idtipos_publicidad),
  INDEX publicidad_FKIndex1(rubro_idrubro),
  INDEX publicidad_FKIndex2(empresas_idempresa),
  INDEX publicidad_FKIndex3(tipos_publicidad_idtipos_publicidad),
  FOREIGN KEY(rubro_idrubro)
    REFERENCES rubro(idrubro)
      ON DELETE CASCADE
      ON UPDATE CASCADE,
  FOREIGN KEY(empresas_idempresa)
    REFERENCES empresas(idempresa)
      ON DELETE CASCADE
      ON UPDATE CASCADE,
  FOREIGN KEY(tipos_publicidad_idtipos_publicidad)
    REFERENCES tipos_publicidad(idtipos_publicidad)
      ON DELETE NO ACTION
      ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE usuario (
  idusuario INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  localidad_idlocalidad INTEGER UNSIGNED NOT NULL,
  nombre VARCHAR(100) NOT NULL,
  apellido VARCHAR(100) NOT NULL,
  fecha_nac DATE NULL,
  login VARCHAR(25) NOT NULL,
  email VARCHAR(100) NOT NULL,
  pass VARCHAR(25) NOT NULL,
  habilitado BOOL NOT NULL,
  domicilio VARCHAR(30) NULL,
  telefono VARCHAR(25) NULL,
  celular VARCHAR(25) NULL,
  PRIMARY KEY(idusuario),
  INDEX usuario_FKIndex1(localidad_idlocalidad),
  FOREIGN KEY(localidad_idlocalidad)
    REFERENCES localidad(idlocalidad)
      ON DELETE NO ACTION
      ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE aviso (
  idaviso INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  usuario_idusuario INTEGER UNSIGNED NOT NULL,
  rubro_idrubro INTEGER UNSIGNED NOT NULL,
  moneda_idmoneda INTEGER UNSIGNED NOT NULL,
  estado_aviso_idestado_aviso INTEGER UNSIGNED NOT NULL,
  titulo VARCHAR(50) NOT NULL,
  detalle TEXT NOT NULL,
  precio FLOAT NULL,
  stock INTEGER UNSIGNED NULL,
  alta DATE NULL,
  baja DATE NULL,
  visitas INTEGER UNSIGNED NULL DEFAULT 0,
  habilitado BOOL NULL,
  destacados INTEGER UNSIGNED ZEROFILL NULL DEFAULT 000,
  prioridad SMALLINT UNSIGNED NULL,
  PRIMARY KEY(idaviso, usuario_idusuario, rubro_idrubro,
moneda_idmoneda, estado_aviso_idestado_aviso),
  INDEX aviso_FKIndex1(usuario_idusuario),
  INDEX aviso_FKIndex2(rubro_idrubro),
  INDEX aviso_FKIndex3(moneda_idmoneda),
  INDEX aviso_FKIndex4(estado_aviso_idestado_aviso),
  FOREIGN KEY(usuario_idusuario)
    REFERENCES usuario(idusuario)
      ON DELETE CASCADE
      ON UPDATE CASCADE,
  FOREIGN KEY(rubro_idrubro)
    REFERENCES rubro(idrubro)
      ON DELETE CASCADE
      ON UPDATE CASCADE,
  FOREIGN KEY(moneda_idmoneda)
    REFERENCES moneda(idmoneda)
      ON DELETE NO ACTION
      ON UPDATE CASCADE,
  FOREIGN KEY(estado_aviso_idestado_aviso)
    REFERENCES estado_aviso(idestado_aviso)
      ON DELETE NO ACTION
      ON UPDATE CASCADE
)
TYPE=InnoDB;

CREATE TABLE fotos (
  idfoto INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  aviso_estado_aviso_idestado_aviso INTEGER UNSIGNED NOT NULL,
  aviso_moneda_idmoneda INTEGER UNSIGNED NOT NULL,
  aviso_rubro_idrubro INTEGER UNSIGNED NOT NULL,
  aviso_usuario_idusuario INTEGER UNSIGNED NOT NULL,
  aviso_idaviso INTEGER UNSIGNED NOT NULL,

// Pues no... con solo el aviso_idaviso y usando la relación tenés el
estado, la moneda, el rubro y el usuario. Estos 4 campos no van acá.

  path VARCHAR(100) NULL,
  PRIMARY KEY(idfoto, aviso_estado_aviso_idestado_aviso,
aviso_moneda_idmoneda, aviso_rubro_idrubro, aviso_usuario_idusuario,
aviso_idaviso),
  INDEX fotos_FKIndex1(aviso_idaviso, aviso_usuario_idusuario,
aviso_rubro_idrubro, aviso_moneda_idmoneda,
aviso_estado_aviso_idestado_aviso),
  FOREIGN KEY(aviso_idaviso, aviso_usuario_idusuario,
aviso_rubro_idrubro, aviso_moneda_idmoneda,
aviso_estado_aviso_idestado_aviso)
    REFERENCES aviso(idaviso, usuario_idusuario, rubro_idrubro,
moneda_idmoneda, estado_aviso_idestado_aviso)
      ON DELETE NO ACTION
      ON UPDATE NO ACTION
)
TYPE=InnoDB;


	Saludos!

PD: prometo responder más rápido el siguiente.
-- 

Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado