Ver Mensaje Individual
  #24 (permalink)  
Antiguo 05/10/2009, 04:12
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: duda sobre estructura BD

Perdón el retraso...
Una de las cosas que puedo decirte es que no estoy de acuerdo con esta tabla:
Código sql:
Ver original
  1. CREATE TABLE IF NOT EXISTS `provincias` (
  2. `provincias_id` INT(2) NOT NULL AUTO_INCREMENT,
  3. `agencia_id` INT(11) DEFAULT NULL,
  4. `escort_id` INT(11) DEFAULT NULL,
  5. `provincia` VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
  6. PRIMARY KEY (`provincias_id`),
  7. KEY `agencia_id` (`agencia_id`,`escort_id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
Esta tabla no debería tener los ID ni de las agencias ni de las escort, por un lado porque cda una de las provincias aparece una sola vez, lo que sólo permitiría entrar una escort y una agencia..., por otro lado, porque su
función es identificar las provincias, no las agencias o las escorts, que en realidad se vinculan a ella por tener en sus propias tablas el ID de la provincia. Esta es una tabla fija. No se actualiza si no es para incluir nuevas provincias de nuevos países.
Debería ser:
Código sql:
Ver original
  1. CREATE TABLE IF NOT EXISTS `provincias` (
  2. `provincias_id` INT(2) NOT NULL AUTO_INCREMENT,
  3. `provincia_nombre` VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL,
  4. PRIMARY KEY (`provincias_id`),
  5. KEY `agencia_id` (`agencia_id`,`escort_id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
Otro tip es: No uses un campo con el nombre de una tabla. Suelen traer problemas al MySQL para reconocer qué es lo que debe leer y dan resultados erráticos.

Esta otra también tiene el mismo problema:
Código sql:
Ver original
  1. CREATE TABLE IF NOT EXISTS `tags` (
  2. `tags_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `agencia_id` INT(11) DEFAULT NULL,
  4. `escort_id` INT(11) DEFAULT NULL,
  5. `tipos_tags` VARCHAR(255) COLLATE utf8_spanish_ci NOT NULL,
  6. PRIMARY KEY (`tags_id`),
  7. KEY `agencia_id` (`agencia_id`,`escort_id`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci ;

Los tags van en una tabla primaria, sin otros ID. Para vincular los tags con las agencias y las escort, necesitas otra tabla:
Código sql:
Ver original
  1. CREATE TABLE IF NOT EXISTS `tags` (
  2. `tags_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `tipos_tags` VARCHAR(255) COLLATE utf8_spanish_ci NOT NULL,
  4. PRIMARY KEY (`tags_id`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci ;

Código sql:
Ver original
  1. CREATE TABLE IF NOT EXISTS `tags_escort_agencia` (
  2. `agencia_id` INT(11) DEFAULT NULL,
  3. `escort_id` INT(11) DEFAULT NULL,
  4. `tags_id` VARCHAR(255) COLLATE utf8_spanish_ci NOT NULL,
  5. PRIMARY KEY (`tags_id`, agencia_id, escort_id)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci  ;
Como nunca se repetirá una combinación entre los tres campos, los tres actúan de tabla primaria.

Finalmente, conforme esas observaciones, a la tabla AGENCIA y a la tabla ESCORT le faltan dos campos: 1 municipio_id y provincia_id, o bien municipio_id solo, ya que de este se puede obtener la provincia. En cualquiera de los dos casos, al menos uno de los valores debe ser mandatorio.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 05/10/2009 a las 06:20