Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/02/2013, 17:23
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. Que tipo de dato debo elegir en PK (Tabla materias, tabla bloque...)

En realidad, sefirotxx, eso es un tema completamente resuelto en el modelo E-R, y lo que planteas no es correcto desde ese punto de vista.
El tema es algo trillado, porque lo hemos tratado innumerables veces, pero veremos si puedo sintetizar.

- Por definición del modelo E-R, toda entidad (y tabla) debe tener una PK.

- También por definición de PK, una clave primaria es siempre única y no nula. Siempre.

- Una clave debería ser siempre un atributo propio de la entidad, es decir propio del objeto o relación representada, sea esta clave compuesta o no.

- Una clave no es conveniente que sea un autoincremental, a menos que llegados a la 3FN, no se haya encontrado un determinante (clave candidata). Los AI causan serios problemas a futuro, en integraciones de datos, consolidaciones de bases, backups, restauraciones, y un enorme etcétera. Están totalmente desaconsejados en la arquitectura de datos, pero como son lo único que parecen comprender bien los programadores, es muy habitual que se usen.

- Las PK deben respetar el esquema integridad referencial, por lo que una tabla puede no tener PK propia sino heredada, o bien heredada pero con un discriminante.

- Debes considerar que las relaciones N:N definen la existencia de tablas que no figuran en el DER lógico, pero que son consecuencia del modelo. Estas tablas no tienen una PK propia sino que la misma se crea con las dos FK de las tablas relacionadas. Esto no lo estás teniendo en cuenta.

- Otros (muchos, muchos) considerandos.

En definitiva, para poder definir las PK que necesitas, lo primero que tienes que hacer es modelar el DER lógico, donde establezcas las entidades que integran el sistema, y recién entonces podrás definir claramente cuáles son las claves adecuadas.
Lo que si puedo decirte es que si puedes evitar los AI, tu será escalable. si los usas... tarde o temprano necesitarás re ingeniería para sacarlos.

Hay capítulos enteros de los libros de fundamentos de base de datos que explican todo esto, que para mas o menos dominarlo tienes que haber estudiado un año entero, más un par adicionales de práctica.
Por lo pronto, mi consejo es lo que dije: Analiza el sistema, verifica las entidades y determina qué las identifica unívocamente. Esa será la mejor clave.

Tu DER físico sería mas o menos:


Lo de elegir como PK un AI o no, es un tema a discutir, pero yo no los recomiendo. Es preferible ver cómo se codificarán las identificaciones de esas cosas en el sistema, y partir de alli.
Los AI traen más complicaciones a futuro que beneficios, como ya te dije.
__________________
¿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; 16/02/2013 a las 18:17