[Php-avanzado] Estructura de base de datos de SALI+

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Lun Ago 31 00:19:32 ART 2009


Hola Carolina,

El dom, 30-08-2009 a las 20:37 -0300, Silverzero escribió:
> Hola Leo,
> 
> En las tablas eventos_status, actividades_status y lugares_status, los
> 3 estados posibles son activo, inactivo, destacado...Creo que es mejor
> que estén ahi juntos en vez de hacer una tabla con destacado: Si-No.

	Es correcto como lo pensaste... pero si los 3 estados posibles son los
mismos, lo que tenés que hacer es tener una sola tabla "status" y usarla
para los tres... la repetición no se justifica.

> Ya que está agregué las tablas Provincias y Localidades, así ya
> quedan.

	Ok.

> Tengo una duda que se me presentó a último momento, a ver si me podés
> aconsejar qué sería lo más conveniente. Todas los "eventos" y
> "actividades" suceden en "lugares", por lo que cuando un visitante
> publica, a la hora de decir en dónde es puede elegir de un menú
> desplegable entre los que ya fueron previamente cargados, o puede
> agregarlo si es que no existe.

	La gente tiene a agregar sin fijarse si existe o no... creo que lo que
te conviene es que se agregue siempre, pero antes del INSERT lo buscás
por algún criterio y si existe lo referenciás o editás si vale la pena
para usarlo (1).

> Ahora el tema es que, tal vez ese visitante no le interese completar
> TODOS los datos, porque no tiene ganas o porque no tiene toda la
> información correspondiente, por lo que ese "lugar" va a quedar
> guardado con su cuenta. Entonces, si al día siguiente el dueño del
> lugar, o alguien que sí tiene información más completa del mismo
> quiere publicar, no va a poder porque el sistema le va a decir que ya
> existe, y si evito eso va a haber lugares repetidos, por más que
> alguno tenga más o menos datos...

	Se entiende...

> Así mismo, noté que este problema se puede presentar con los eventos y
> actividades, ya que si la información es subida por una persona que
> sólo publica por el hecho que le gusta el evento, pero no forma parte
> de la organización del mismo, después no va a ser editable por el real
> responsable que quiera promocionarlo de mejor manera, y ahi van a
> querer intervención del administrador para poder modificarlo, y va a
> ser molesto.

	Es cierto... sin embargo podés dejar la edición pendiente para ser
aprobada por el que la cargó primero, o usar alguna estrategia semejante
(2).

> Con lo cual se me ocurrió una opción comunitaria (con sub-opción
> capitalista): Que cualquier publicación pueda ser editada por
> cualquier visitante, a lo wikipedia style. Y si el propietario del
> lugar, o el real organizador de un evento o actividad no quiere que
> nadie lo edite más, que se ponga con un destacado.
> 
> ¿Qué opinás?

	También es una buena opción, que hasta se puede conjugar con la (1).

	Ahora bien, con estas cosas tu proyecto, que ya es grande, se agranda
más todavía, y no me gusta, porque te va a llevar demasiado tiempo
escribirlo con todo lo que esto implica...

> A continuación te transcribo la estructura de la DB.

	Pero todo lo anterior me dejó una duda: si los Lugares se manejan así,
tendrás que hacer que los eventos y las actividades apunten al id_lugar,
lo cual no pasa en una de las tablas... por qué?

	Te intercalo comentarios:


> -- Estructura de tabla para la tabla `actividades`
> --
> 
> CREATE TABLE IF NOT EXISTS `actividades` (
>   `id` int(11) NOT NULL auto_increment,
>   `fecha` date NOT NULL,
>   `titulo` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `direccion` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `telefono` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `horario` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `descripcion` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `imagen` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `url` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `id_visitante` int(11) NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;

	Acá por ejemplo, tenés dirección, teléfono y más datos, cuando
pareciera que debe ir un id_lugar... podés justificar por qué no va solo
el id_lugar ???

> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `actividades_cat`
> --
> 
> CREATE TABLE IF NOT EXISTS `actividades_cat` (
>   `id` int(11) NOT NULL auto_increment,
>   `nombre` varchar(50) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;
> 
> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `actividades_status`
> --
> 
> CREATE TABLE IF NOT EXISTS `actividades_status` (
>   `id` int(11) NOT NULL auto_increment,
>   `id_actividad` int(11) NOT NULL,
>   `stat` varchar(10) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;

	Esta es la que se puede juntar con las otras dos "status".

> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `actividades_subcat`
> --
> 
> CREATE TABLE IF NOT EXISTS `actividades_subcat` (
>   `id` int(11) NOT NULL auto_increment,
>   `id_actividad_cat` int(11) NOT NULL,
>   `nombre` varchar(50) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;
> 
> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `admins`
> --
> 
> CREATE TABLE IF NOT EXISTS `admins` (
>   `id` int(11) NOT NULL auto_increment,
>   `nombres` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `apellidos` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `domicilio` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `telefonos` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `email` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `pass` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `id_ciudad` int(11) NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;
> 
> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `diccionario`
> --
> 
> CREATE TABLE IF NOT EXISTS `diccionario` (
>   `id` int(11) NOT NULL auto_increment,
>   `frase` varchar(50) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;
> 
> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `eventos`
> --
> 
> CREATE TABLE IF NOT EXISTS `eventos` (
>   `id` int(11) NOT NULL auto_increment,
>   `fecha` date NOT NULL,
>   `desde` date NOT NULL,
>   `hasta` date NOT NULL,
>   `horario` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `titulo` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `descripcion` text collate utf8_unicode_ci NOT NULL,
>   `imagen` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `url` varchar(100) collate utf8_unicode_ci NOT NULL,
>   `precio` float NOT NULL,
>   `id_visitante` int(11) NOT NULL,
>   `id_lugar` int(11) NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;

	... y este sí tiene el id_lugar...

> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `eventos_cat`
> --
> 
> CREATE TABLE IF NOT EXISTS `eventos_cat` (
>   `id` int(11) NOT NULL auto_increment,
>   `nombre` varchar(50) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;
> 
> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `eventos_status`
> --
> 
> CREATE TABLE IF NOT EXISTS `eventos_status` (
>   `id` int(11) NOT NULL auto_increment,
>   `id_evento` int(11) NOT NULL,
>   `stat` varchar(10) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;

	a juntar!

> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `eventos_subcat`
> --
> 
> CREATE TABLE IF NOT EXISTS `eventos_subcat` (
>   `id` int(11) NOT NULL auto_increment,
>   `id_evento_cat` int(11) NOT NULL,
>   `nombre` varchar(50) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;
> 
> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `localidades`
> --
> 
> CREATE TABLE IF NOT EXISTS `localidades` (
>   `cod_loc` int(4) NOT NULL auto_increment,
>   `cod_prov` int(2) NOT NULL,
>   `desc` varchar(31) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`cod_loc`)
> ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=2383 ;
> 
> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `lugares`
> --
> 
> CREATE TABLE IF NOT EXISTS `lugares` (
>   `id` int(11) NOT NULL auto_increment,
>   `fecha` date NOT NULL,
>   `nombre` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `direccion` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `telefono` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `horario` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `descripcion` text collate utf8_unicode_ci NOT NULL,
>   `imagen` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `url` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `id_visitante` int(11) NOT NULL,
>   `cod_loc` int(4) NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;

	Es relevante que el Lugar tenga fecha y horario??? Bueno, horario de
funcionamiento tal vez, pero fecha?

> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `lugares_cat`
> --
> 
> CREATE TABLE IF NOT EXISTS `lugares_cat` (
>   `id` int(11) NOT NULL auto_increment,
>   `nombre` varchar(50) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;
> 
> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `lugares_status`
> --
> 
> CREATE TABLE IF NOT EXISTS `lugares_status` (
>   `id` int(11) NOT NULL auto_increment,
>   `id_lugar` int(11) NOT NULL,
>   `stat` varchar(10) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;

	A juntar!

> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `lugares_subcat`
> --
> 
> CREATE TABLE IF NOT EXISTS `lugares_subcat` (
>   `id` int(11) NOT NULL auto_increment,
>   `id_lugar_cat` int(11) NOT NULL,
>   `nombre` varchar(50) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;
> 
> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `provincias`
> --
> 
> CREATE TABLE IF NOT EXISTS `provincias` (
>   `cod_prov` int(2) NOT NULL,
>   `desc` varchar(30) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`cod_prov`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
> 
> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `visitantes`
> --
> 
> CREATE TABLE IF NOT EXISTS `visitantes` (
>   `id` int(11) NOT NULL,
>   `fecha` date NOT NULL,
>   `nombres` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `apellidos` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `alias` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `email` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `pass` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `avatar` varchar(50) collate utf8_unicode_ci NOT NULL,
>   `about` text collate utf8_unicode_ci NOT NULL,
>   `intereses` text collate utf8_unicode_ci NOT NULL,
>   `url` varchar(50) collate utf8_unicode_ci NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
> 
> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `votos_actividades`
> --
> 
> CREATE TABLE IF NOT EXISTS `votos_actividades` (
>   `id` int(11) NOT NULL auto_increment,
>   `cantidad` int(11) NOT NULL,
>   `id_actividad` int(11) NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;
> 
> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `votos_eventos`
> --
> 
> CREATE TABLE IF NOT EXISTS `votos_eventos` (
>   `id` int(11) NOT NULL auto_increment,
>   `cantidad` int(11) NOT NULL,
>   `id_evento` int(11) NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;
> 
> -- --------------------------------------------------------
> 
> --
> -- Estructura de tabla para la tabla `votos_lugares`
> --
> 
> CREATE TABLE IF NOT EXISTS `votos_lugares` (
>   `id` int(11) NOT NULL auto_increment,
>   `cantidad` int(11) NOT NULL,
>   `id_lugar` int(11) NOT NULL,
>   PRIMARY KEY  (`id`)
> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> AUTO_INCREMENT=1 ;

	Nada más!

-- 

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