[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