Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/10/2010, 10:09
Enfermin
 
Fecha de Ingreso: septiembre-2009
Mensajes: 54
Antigüedad: 15 años, 4 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.