[Php-avanzado] Tablas Clasificados Miramar

Ezequiel Mujica ezequielmujica en gmail.com
Mar Ago 25 19:59:27 ART 2009


*Hola Leo,

Van mis comentarios en* *rojo* ..


2009/8/20 Leonardo Tadei - Pegasus Tech Supply <leonardot en pegasusnet.com.ar>

> Hola Ezequiel,
>
> El mar, 18-08-2009 a las 23:13 -0300, Ezequiel Mujica escribió:
> > Hola a todos !!
> >
> > Leo:
> >       Te paso mis tablas para revisar.
>
>         Te respondo intercalado:
>
> CREATE TABLE provincia (
>  idprovincia INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
>  nombre VARCHAR(100) NULL,
>  PRIMARY KEY(idprovincia)
> )
> TYPE=InnoDB;
>
>
> CREATE TABLE rubro (
>  idrubro INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
>  nombre VARCHAR(80) NULL,
>  destacado BOOL NULL,
>  imagen VARCHAR(50) NULL,
>  PRIMARY KEY(idrubro)
> )
> TYPE=InnoDB;
>
>        Sugerencia: cambiá destacado a CHAR(1), porque preguntar si es igual
> a
> TRUE o igual a "A" es lo mismo, y te permite agregar tipos de destacados
> en el futuro.
>        La DB notará el impacto de esto recién a las decenas de miles de
> registros...


    *SUGERENCIA ACEPTADA ;-)*

>
>
> CREATE TABLE xxx (
>  idxxx VARCHAR(30) NOT NULL,
>  PRIMARY KEY(idxxx)
> )
> TYPE=InnoDB;
>
>        Lo qué???

          *ESTA TABLA NO ESTA DEL TODO DEFINIDA, MI IDEA ES CREAR UNA TABLA
DE PALABRAS PROHIBIDAS, UNA LISTA NEGRA DE PALABRAS QUE NO DEBEN UTILIZARCE,
COMO QUERIA PREGUNTARTE A VOS QUE ES MEJOR... O QUE RECOMENDAS ES QUE QUEDO
PELADA...*

>
>
> CREATE TABLE empresa (
>  idempresa INT NOT NULL AUTO_INCREMENT,
>  nombre VARCHAR(30) NULL,
>  domicilio VARCHAR(100) NULL,
>  email VARCHAR(80) NULL,
>  telefono VARCHAR(50) NULL,
>  celular VARCHAR(50) NULL,
>  PRIMARY KEY(idempresa)
> )
> TYPE=InnoDB;
>
>        Si acá van las Empresas que tienen un id en la tabla Publicidad,
> esta
> tabla debe llamarse "Empresas", en plurarl.

          *OK, CORRIGIENDO ...*

>
>
> CREATE TABLE foto (
>  idfoto INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
>  foto1 VARCHAR(100) NULL,
>  foto2 VARCHAR(100) NULL,
>  foto3 VARCHAR(100) NULL,
>  foto4 VARCHAR(100) NULL,
>  foto5 VARCHAR(100) NULL,
>  foto6 VARCHAR(100) NULL,
>  foto7 VARCHAR(100) NULL,
>  foto8 VARCHAR(100) NULL,
>  info TEXT NULL,
>  PRIMARY KEY(idfoto)
> )
> TYPE=InnoDB;
>
>        Mal! Horrible!
>        Esto debe ser una simple relación uno-a-muchos.
>        Además es como si una misma foto, referenciada por el idfoto,
> pudiera
> tener varias fotos!

         * LO VI TARDE AL DETALLECITO ESTE :-(  *

>
>
> 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 NO ACTION
> )
> TYPE=InnoDB;
>
>        Muy bueno lo de la integridad referencial.
>        La escribiste a mano o estás usando algún generador visual? Contame
> cuál!

          *UN POCO DE TODO ACÃ, PARA CHECKEAR POR LAS DUDAS SUELO USAR MySQL
WORKBENCH.. TOTALMENTE LIBRE ;-)*

>
>
> CREATE TABLE usuario (
>  idusuario INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
>  localidad_idlocalidad INTEGER UNSIGNED NOT NULL,
>  nombre VARCHAR(25) NOT NULL,
>  apellido VARCHAR(25) NOT NULL,
>  fecha_nac DATE NULL,
>  login VARCHAR(25) NOT NULL,
>  email VARCHAR(40) NOT NULL,
>  pass VARCHAR(25) NOT NULL,
>  habilitado BOOL NOT NULL,
>  domicilio VARCHAR(30) NULL,
>  telefono VARCHAR(25) NULL,
>  celular VARCHAR(25) NULL,
>  eshop BOOL NULL,
>  PRIMARY KEY(idusuario),
>  INDEX usuario_FKIndex1(localidad_idlocalidad),
>  FOREIGN KEY(localidad_idlocalidad)
>    REFERENCES localidad(idlocalidad)
>      ON DELETE NO ACTION
>      ON UPDATE NO ACTION
> )
> TYPE=InnoDB;
>
>        Qué es "eshop"? No lo relaciono con nada de la SRS...

          *ESHOP SERIA UNA TIENDA VIRTUAL, QUE PODRIA TENER CADA CLIENTE POR
UN ABONO MENSUAL "X" .. SE ME HABIA OCURRIDO PARA QUE SEA ALGO A FUTURO*

>
>
> CREATE TABLE publicidad (
>  idpublicidad INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
>  rubro_idrubro INTEGER UNSIGNED NOT NULL,
>  empresa_idempresa INT NOT NULL,
>  nombre VARCHAR(100) NULL,
>  largo SMALLINT UNSIGNED NULL,
>  ancho SMALLINT UNSIGNED NULL,
>  tipo ENUM('jpg','swf','gif','png') NULL,
>  ruta VARCHAR(100) NULL,
>  ruta_imagen VARCHAR(100) NULL,
>  ubicacion VARCHAR(30) NULL,
>  costo SMALLINT UNSIGNED NULL,
>  impresiones INTEGER UNSIGNED NULL,
>  clics INTEGER UNSIGNED NULL,
>  PRIMARY KEY(idpublicidad, rubro_idrubro, empresa_idempresa),
>  INDEX publicidad_FKIndex1(rubro_idrubro),
>  INDEX publicidad_FKIndex2(empresa_idempresa),
>  FOREIGN KEY(rubro_idrubro)
>    REFERENCES rubro(idrubro)
>      ON DELETE CASCADE
>      ON UPDATE CASCADE,
>  FOREIGN KEY(empresa_idempresa)
>    REFERENCES empresa(idempresa)
>      ON DELETE CASCADE
>      ON UPDATE CASCADE
> )
> TYPE=InnoDB;
>
>        Las campos ENUM no sirven para listas que pueden extenderse como
> este
> caso, en el que te puede interesar soportar otros formatos a futuro como
> SVG o Java... además es una tablita fácil ;-)
>        Qué son las dos "rutas" que tiene?

           *AGREGADA LA TABLA DE TIPOS DE PUBLICIDADES.
           LAS DOS RUTAS QUE AHORA SE LLAMAN: PATH Y URL CORRESPONDEN AL
PATH DONDE SE ALOJAN LAS PUBLICIDADES EN EL SERVIDOR, Y A LA URL QUE DEBE DE
APUNTAR DICHA PUBLICIDAD AL HACERLE CLICK.-*

>
>
> CREATE TABLE aviso (
>  idaviso INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
>  usuario_idusuario INTEGER UNSIGNED NOT NULL,
>  rubro_idrubro INTEGER UNSIGNED NOT NULL,
>  localidad_idlocalidad INTEGER UNSIGNED NOT NULL,
>  foto_idfoto INTEGER UNSIGNED NOT NULL,
>  titulo VARCHAR(50) NOT NULL,
>  detalle VARCHAR(250) NOT NULL,
>  estado ENUM('nuevo','usado','noaplica') NULL,
>  moneda ENUM('pesos','dolares') NULL,
>  precio VARCHAR(5) NULL,
>  centavos VARCHAR(2) NULL,
>  stock INTEGER UNSIGNED NULL,
>  alta DATE NULL,
>  baja DATE NULL,
>  visitas INTEGER UNSIGNED NULL DEFAULT 0,
>  habilitado BOOL NULL,
>  masinfo BOOL NULL,
>  destacados INTEGER UNSIGNED ZEROFILL NULL DEFAULT 000,
>  prioridad SMALLINT UNSIGNED NULL,
>  PRIMARY KEY(idaviso, usuario_idusuario, rubro_idrubro,
> localidad_idlocalidad, foto_idfoto),
>  INDEX aviso_FKIndex1(usuario_idusuario),
>  INDEX aviso_FKIndex2(rubro_idrubro),
>  INDEX aviso_FKIndex3(localidad_idlocalidad),
>  INDEX aviso_FKIndex4(foto_idfoto),
>  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(localidad_idlocalidad)
>    REFERENCES localidad(idlocalidad)
>      ON DELETE NO ACTION
>      ON UPDATE NO ACTION,
>  FOREIGN KEY(foto_idfoto)
>    REFERENCES foto(idfoto)
>      ON DELETE NO ACTION
>      ON UPDATE NO ACTION
> )
> TYPE=InnoDB;
>
>        El campo "localidad" en esta tabla no me suena del todo... a qué
> localidad vas a referenciar?

*          ESTO LO CORREGI Y LO SAQUE, LA IDEA ERA QUE CORRESPONDIERA A LA
LOCALIDAD DONDE SE ENCUENTRA UBICADO LO QUE SE QUIERE VENDER.*

>
>        foto_idfoto no va acá por la relación uno-a-muchos que tenés.

          *CORREGIDO.-*

>
>        "estado" y "moneda" también son tablas aparte. Normalizando se evita
> tener que modificar la estructura de las tablas!

           *CORREGIDO.-*

>
>        "precio" y "centavos" no debería ser varchar, pero "centavos" sobra
> y
> te saca hasta de 1FN!!! Un flotante es lo correcto para esto.

           *OK, ESO ME PASA POR USAR COMO GUIA LOS SITIOS CLÃSICOS SOBRE LA
MATERIA.... :-(*

>
>        "stock" y "visitas" no son cosas que figuren en tu SRS. las vas a
> agregar?

           *SON COSAS QUE TENIA PENSADO HACER, PERO X TIEMPO NO LAS IBA A
AGREGAR AHORA.
           DE TODAS FORMAS AGREGO "VISITAS" Y DEJO STOCK PARA UNA 2ª
VERSIÓN.-*

>
>        Qué es "masinfo" ?

          * ESTO LO ELIMINÉ, PORQUE QUEDO DE OTRA IDEA QUE HABIA TENIDO PARA
EL FORMATO DE LOS AVISOS.-*

>
>        Tampoco indica tu SRS que haya que priorizar los avisos. Este
> sistema
> es más grande que el especificaste...

          *ESTO SI LO AGREGO :-D ME INTERESO EL TEMA.-*

>
>        Si el usuario que publica se llama usuario, cómo se llama el usuario
> que administra? No necesitás guardar su user y pass para que se loguee?

          * PEQUEÑO DETALLE :-S*

*BUENO, VA EN ADJUNTO EL NUEVO .SQL CON LAS CORRECCIONES.

SALUDOS, EZEQUIEL.-*

> --
>
> Leonardo Tadei
> leonardot en pegasusnet.com.ar
> http://blog.pegasusnet.com.ar
> Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
>
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://www3.fi.mdp.edu.ar/cgi-bin/mailman/private/php-avanzado/attachments/20090825/fc5dd366/attachment-0001.htm 
------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : clasificados_25.08.09.sql
Tipo       : application/octet-stream
Tamaño     : 6201 bytes
Descripción: no disponible
Url        : http://www3.fi.mdp.edu.ar/cgi-bin/mailman/private/php-avanzado/attachments/20090825/fc5dd366/attachment-0001.obj 


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