Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Duda con diseño de mi base de datos

Estas en el tema de Duda con diseño de mi base de datos en el foro de Bases de Datos General en Foros del Web. Hola a todos, voy a crear una web de 3 idiomas en y estoy diseñando mi base de datos en Mysql pero tengo un dilema, ...
  #1 (permalink)  
Antiguo 04/10/2010, 20:09
 
Fecha de Ingreso: septiembre-2009
Mensajes: 54
Antigüedad: 15 años, 2 meses
Puntos: 0
Pregunta Duda con diseño de mi base de datos

Hola a todos, voy a crear una web de 3 idiomas en y estoy diseñando mi base de datos en Mysql pero tengo un dilema, primero vean mis tablas



Como se ve tengo una relacion de muchos a muchos de la tabla category y lang lo relacione con la ide workbench y me creo la tabla category_lang con las 2 llaves primarias... mi duda es: ¿Es correcto trabajar de esa forma? osea con 2 llaves primarias en una tabla, he leido que solo deberia haber 1 sola llave primaria por cada tabla, esa es mi duda.. no se si dejarlo asi o cambiar las 2 llaves primarias a foraneas; Me podrian orientar un poco
Saludos
  #2 (permalink)  
Antiguo 05/10/2010, 03:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Duda con diseño de mi base de datos

Cita:
Es correcto trabajar de esa forma? osea con 2 llaves primarias en una tabla, he leido que solo deberia haber 1 sola llave primaria por cada tabla
No confundas una PK de doble campo con dos PK. Eso no existe y simplemente el DBMS no te dejaría crear una PK cuando hay otra ya definida. Por ese lado no te procupes.

Acuérdate la definición básica:

Una clave primaria es un campo o conjunto de campos que identifica unívocamente un registro en una tabla.

Esto significa que si en una tabla un sólo campo no tiene la unicidad suficiente para ser PK, se debe buscar cuál combinación de campos sí lo posee, antes de ponerse a crearle un campo adicional para ello (esto ultimo se les escapa a muchos por fiaca, y porque sólo se estudia en profundidad en cursos universitarios).

En el contexto de tu diseño, category_lang es una relación con atributos dentro del DER lógico, por lo que corresponde que exista como tabla y su PK debe ser la combinación de PKs de las tablas relacionadas. No lleva ningún otro atributo como PK adicional (podría perfectamente ser una PK de triple campo), porque esa relación no es iterable en cada par relacionado.

¿Se entiende?

Resumen: El diseño está OK.

Dos tips:
1) No abuses de los VARCHAR. No siempre es necesario ponerle a un varchar la longitud máxima posible, ya que la longitud debe ser la que se espera como máxima del dato. Los campos no se dimensionan arbitrariamente. Para darte otro ejemplo: Si voy a guardar las velocidades alcanzadas por un auto, ¿para que voy a usar SMALLINT UNSIGNED (0 a 65535) si con un TINYINT UNSIGNED (0 a 255) me sobra?...
2) Los varchar, pese a lo que digan algunos manuales viejos, no tiene un límite de 255 caracteres, sino de 65535, a partir del MySQL 5.0.3, o sea, hace más de tres años. Aprovéchalos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 05/10/2010, 10:09
 
Fecha de Ingreso: septiembre-2009
Mensajes: 54
Antigüedad: 15 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Duda con diseño de mi base de datos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No confundas una PK de doble campo con dos PK. Eso no existe y simplemente el DBMS no te dejaría crear una PK cuando hay otra ya definida. Por ese lado no te procupes.

Acuérdate la definición básica:

Una clave primaria es un campo o conjunto de campos que identifica unívocamente un registro en una tabla.

Esto significa que si en una tabla un sólo campo no tiene la unicidad suficiente para ser PK, se debe buscar cuál combinación de campos sí lo posee, antes de ponerse a crearle un campo adicional para ello (esto ultimo se les escapa a muchos por fiaca, y porque sólo se estudia en profundidad en cursos universitarios).

En el contexto de tu diseño, category_lang es una relación con atributos dentro del DER lógico, por lo que corresponde que exista como tabla y su PK debe ser la combinación de PKs de las tablas relacionadas. No lleva ningún otro atributo como PK adicional (podría perfectamente ser una PK de triple campo), porque esa relación no es iterable en cada par relacionado.

¿Se entiende?

Resumen: El diseño está OK.

Dos tips:
1) No abuses de los VARCHAR. No siempre es necesario ponerle a un varchar la longitud máxima posible, ya que la longitud debe ser la que se espera como máxima del dato. Los campos no se dimensionan arbitrariamente. Para darte otro ejemplo: Si voy a guardar las velocidades alcanzadas por un auto, ¿para que voy a usar SMALLINT UNSIGNED (0 a 65535) si con un TINYINT UNSIGNED (0 a 255) me sobra?...
2) Los varchar, pese a lo que digan algunos manuales viejos, no tiene un límite de 255 caracteres, sino de 65535, a partir del MySQL 5.0.3, o sea, hace más de tres años. Aprovéchalos.
Gracias por responder amigo, para entender lo que escribiste tuve que googlear un poco y ahora veo que se trata de claves primarias compuestas
Creo que anduve confundido por que no me detuve a entender ese concepto y ahora ya me quedo muy claro y no estaba enterado de ese limite de caracteres de varchar
Muchas Gracias.

Etiquetas: diseño
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:35.