[Php-avanzado] Leo: A ver que te parece esto...

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Vie Nov 13 00:17:37 ARST 2009


Hola Carolina,

El jue, 12-11-2009 a las 20:14 -0300, Silverzero escribió:
> Me confundí en unas cositas en la exportacion de las tablas, las
> corrijo así a mano antes que me las marques!!. =P

	Por las dudas, no vi el otro mail ;-)

> 2009/11/12 Silverzero <silverzero.52 en gmail.com>
>         Me hiciste pensar mucho, lo cual es bueno, cada vez estoy
>         ampliando mi visión normalizacionística...de a poco, pero ahi
>         voy.

	Te comento intercalado:

>         
>         -- phpMyAdmin SQL Dump
>         -- version 2.11.9.5
>         -- http://www.phpmyadmin.net
>         --
>         -- Servidor: localhost
>         -- Tiempo de generación: 12-11-2009 a las 20:41:34
>         -- Versión del servidor: 5.0.81
>         -- Versión de PHP: 5.2.9
>         
>         SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
>         
>         --
>         -- Base de datos: `salimas_sitio`
>         --
>         
>         -- --------------------------------------------------------
>         
>         --
>         -- Estructura de tabla para la tabla `actividades`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `actividades` (
>           `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(50) collate utf8_unicode_ci NOT NULL,
>           `precio` varchar(50) collate utf8_unicode_ci NOT NULL,
>           `id_visitante` int(11) NOT NULL,
>           `id_lugar` int(11) NOT NULL,
>           `id_stat` int(2) NOT NULL,
>           PRIMARY KEY  (`id`)
>         ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
>         AUTO_INCREMENT=2 ;
>         
>         -- --------------------------------------------------------
>         
>         --
>         -- Estructura de tabla para la tabla `actividadesXcat`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `actividadesXcat` (
>           `id` int(11) NOT NULL auto_increment,
>           `id_act` int(11) NOT NULL,
>           `id_cat` int(11) NOT NULL,
>           PRIMARY KEY  (`id`)
>         ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
>         AUTO_INCREMENT=1 ;
>         
>         -- --------------------------------------------------------

	Ok. Una Actividad puede tener cero, una o varias Categorías.

>         --
>         -- Estructura de tabla para la tabla `actividadesXsubcat`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `actividadesXsubcat` (
>           `id` int(11) NOT NULL auto_increment,
>           `id_act` int(11) NOT NULL,
>           `id_subcat` int(11) NOT NULL,
>           PRIMARY KEY  (`id`)
>         ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
>         AUTO_INCREMENT=1 ;
> 
>         -- --------------------------------------------------------

	Ok. Una Actividad puede tener cero, una o varias SubCategorías.

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

	Ok.

>         --
>         -- Estructura de tabla para la tabla `catXsubcat`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `catXsubcat` (
>           `id` int(11) NOT NULL auto_increment,
>           `id_cat` int(11) NOT NULL,
>           `id_subcat` int(11) NOT NULL,
>           PRIMARY KEY  (`id`)
>         ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
>         AUTO_INCREMENT=1 ;
>         
>         -- --------------------------------------------------------

	Nop... y dónde está el nombre de la SubCategoría???

	Si es la tabla que Sucategorias que está al final del todo, estás
diciendo que las Subcategorías son las mismas para las Actividades,
Lugares y Eventos, pero las Categorías no, lo cual no tiene mucho
sentido...

	Pasa lo mismo con los Lugares y Eventos...

>         --
>         -- 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=38 ;
>         
>         -- --------------------------------------------------------
>         
>         --
>         -- 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` varchar(50) collate utf8_unicode_ci NOT NULL,
>           `id_visitante` int(11) NOT NULL,
>           `id_lugar` int(11) NOT NULL,
>           `id_stat` int(2) NOT NULL,
>           PRIMARY KEY  (`id`)
>         ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
>         AUTO_INCREMENT=4 ;
>         
>         -- --------------------------------------------------------
>         
>         --
>         -- Estructura de tabla para la tabla `eventosXcat`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `eventosXcat` (
>           `id` int(11) NOT NULL auto_increment,
>           `id_eve` int(11) NOT NULL,
>           `id_cat` 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 `eventosXsubcat`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `eventosXsubcat` (
>           `id` int(11) NOT NULL auto_increment,
>           `id_eve` int(11) NOT NULL,
>           `id_subcat` 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 `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,
>           `email` varchar(50) collate utf8_unicode_ci NOT NULL,
>           `horario` varchar(50) collate utf8_unicode_ci NOT NULL,
>           `precio` 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,
>           `id_stat` int(2) NOT NULL,
>           PRIMARY KEY  (`id`)
>         ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
>         AUTO_INCREMENT=11 ;
>         
>         -- --------------------------------------------------------
>         
>         --
>         -- Estructura de tabla para la tabla `lugaresXcat`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `lugaresXcat` (
>           `id` int(11) NOT NULL auto_increment,
>           `id_lug` int(11) NOT NULL,
>           `id_cat` 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 `lugaresXsubcat`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `lugaresXsubcat` (
>           `id` int(11) NOT NULL auto_increment,
>           `id_lug` int(11) NOT NULL,
>           `id_subcat` 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 `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 `status`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `status` (
>           `id` 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;
>         
>         -- --------------------------------------------------------
>         
>         --
>         -- Estructura de tabla para la tabla `subcategorias`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `subcategorias` (
>           `id` int(11) NOT NULL auto_increment,
>           `subcat` 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 `tipos`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `tipos` (
>           `id` int(11) NOT NULL auto_increment,
>           `tipo` varchar(50) collate utf8_unicode_ci NOT NULL,
>           PRIMARY KEY  (`id`)
>         ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
>         AUTO_INCREMENT=4 ;
>         
>         -- --------------------------------------------------------
>         
>         --
>         -- Estructura de tabla para la tabla `tiposXcat`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `tiposXcat` (
>           `id` int(11) NOT NULL auto_increment,
>           `id_tipo` int(11) NOT NULL,
>           `id_cat` 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 `visitantes`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `visitantes` (
>           `id` int(11) NOT NULL auto_increment,
>           `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,
>           `ocupacion` 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,
>           `id_stat` int(2) NOT NULL,
>           PRIMARY KEY  (`id`)
>         ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
>         AUTO_INCREMENT=3 ;
>         
>         -- --------------------------------------------------------
>         
>         --
>         -- Estructura de tabla para la tabla `votos`
>         --
>         
>         CREATE TABLE IF NOT EXISTS `votos` (
>           `id` int(11) NOT NULL auto_increment,
>           `voto` int(11) NOT NULL,
>           `puntaje` int(11) NOT NULL,
>           `id_ref` int(11) NOT NULL,
>           `id_tipo` int(11) NOT NULL,
>           `id_visitante` int(11) NOT NULL,
>           PRIMARY KEY  (`id`)
>         ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
>         AUTO_INCREMENT=1 ;
>         


	Carolina: llegados a este punto me da la sensación de que, al darte
cuenta de un nuevo escenario para la normalización, se lo querés aplicar
indiscriminadamente a _todo_, en vez de pensar para qué partes es útil y
para cuales no sirve.

	Creo que no hay (al menos no había) muchas dudas de que las
SubSategorías de, por ejemplo, un Evento se corresponden con una
Categoría, lo que da por resultado una tabla con id, id_cat, nombre, que
estaba antes por acá.

	Ahora cambiaste todo a una relación muchos-a-muchos que no se desprende
de la idea Categoría-SubCategoría, que es claramente una relación
uno-a-muchos... y tampoco se desprende de tu SRS...

	Te mando un saludo!



PD: tal vez te sirva "volver a empezar" y hacer una lista de todos los
datos a guardar, y ahora que tenés mejor manejo de la normalización,
volver a pasar por cada forma normal hasta llegar a la 3ra.

-- 

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