[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