Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: PanConMantequilla en 24 Mayo 2011, 00:43 am



Título: ayuda con relaciones a db
Publicado por: PanConMantequilla en 24 Mayo 2011, 00:43 am
Hola a todos, estoy empezando a modelar bases de datos  :-[ (sigo leendo manuales) y mi duda es la sgte:

Modelo una db para 2 idiomas y no se que tipo de llave usar (PK,FK,unique, KEY, etc) a los campos que relacionan ambas tablas.

Mi duda esta en la tabla contents_lang y sus campos id_content e id_lang, pensaba nombrarlos FK con referencias a sus respectivas tablas pero busque ejemplos y vi que en otros casos a esos dos campos los usan como PK (2 llaves primarias, y las referencias :huh:) ,KEY, y hasta UNIQUE KEY  >:( , no se cual sea la opcion correcta y ¿por que?
 

Código
  1.  
  2. CREATE TABLE IF NOT EXISTS `contents`(
  3. `id_content` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  4. `name` VARCHAR(20) NOT NULL,
  5. `date_add` DATETIME,
  6. `date_upd` DATETIME,
  7. PRIMARY KEY(`id_content`)
  8. )ENGINE=MyISAM DEFAULT CHARSET=utf8;
  9.  
  10.  
  11.  
  12. CREATE TABLE IF NOT EXISTS `contents_lang`(
  13. `id_content` INT(11) UNSIGNED NOT NULL,
  14. `id_lang` INT(10) UNSIGNED NOT NULL,
  15. `title` VARCHAR(100) NOT NULL,
  16. `description` TEXT NOT NULL,
  17. PRIMARY KEY(`id_content`,`id_lang`)
  18. )ENGINE=MyISAM DEFAULT CHARSET=utf8;
  19.  
  20.  
  21.  
  22. CREATE TABLE IF NOT EXISTS `lang`(
  23. `id_lang` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  24. `name` VARCHAR(32) NOT NULL,
  25. `active` TINYINT(1) NOT NULL DEFAULT '0'
  26. `iso_code` CHAR(2) NOT NULL,
  27. PRIMARY KEY(`id_lang`)
  28. )ENGINE=MyISAM DEFAULT CHARSET=utf8;
  29.  
  30.  

Saludos y doy gracias de ante mano  ;)


Título: Re: ayuda con relaciones a db
Publicado por: [u]nsigned en 24 Mayo 2011, 14:08 pm
Si tus tablas son MyISAM no tiene sentido usr claves foraneas, dado que todava no son soportadas por este motor.

Creo que deberias usar PK.

Saludos


Título: Re: ayuda con relaciones a db
Publicado por: PanConMantequilla en 24 Mayo 2011, 17:19 pm
Gracias por responder y aclararme lo de las FK en MyISAM, entonces usare 2 PK como tenia en mente, pero ahora como hago las referencias, pensaba hacer ingenieria inversa en workbench y ver mis tablas relacionadas (las lineas de tabla a tabla) para observar como va, como haria eso? porque las PK no llevan REFERENCES como las FK para hacer esos enlaces, aún no domino workbench y preferiria hacerlo a codigo

Gracias de ante mano


Título: Re: ayuda con relaciones a db
Publicado por: PanConMantequilla en 26 Mayo 2011, 01:41 am
alguien podria explicar mi segunda duda  :-( :-( :-(


Título: Re: ayuda con relaciones a db
Publicado por: Nakp en 26 Mayo 2011, 05:50 am
necesitas integridad referencial? utiliza innodb para las tablas, en vez de myisam...


Título: Re: ayuda con relaciones a db
Publicado por: PanConMantequilla en 26 Mayo 2011, 23:07 pm
Gracias por responder, prefiero seguir usando myisam, y no es un requisito tener integridad referencial pero me gustaría que lo tenga para tener una mejor vista de toda la db completa, además ver las tablas sin integridad referencial en workbench u otra ide debe ser un lio el no ver instantaneamente que tabla se relaciona con otra  :-\
Aún no acepto la idea que no exista integridad referencial en myisam o no sé como soportan uds ver las tablas sin esas las lineas relacionales.. o se lo aguantan  :xD

saludos

PD: la integridad referencial a la que me refiero es solo a las lineas que unen un id de una tabla a otra, mas no la actualizacion o eliminacion en cascada