Ayuda crear una clave primaria

Hola Alfredo, te cuento mi problema: (con abstracción de datos)
Le mostramos a nuestro profesor una base de datos y el nos pidió que armemos de cierta manera la clave primaria. ¿Cuál es mi problema? Que las tablas armadas como las teníamos estaban funcionando y el cambio que nos pidió no lo entiendo y no lo estoy pudiendo hacer, te escribo para ver que opinas y si me podes echar una mano.
Voy con el ejemplo así se entiende de que hablo
La base de datos (MS SQL Server) es para un colegio, las tablas que te voy a mostrar son para el "plan de estudio" (curricula creo que pude ser en otros países)
tblPlan (IDplan-PK-, NombrePlan-numeric-) 
tblCarrera (IDcarrera-PK-, Nombre, IDplan-FK-)
tblMateria (IDmateria-PK-, NombreMateria, CursoMateria ,IDCarrera-FK-, IDPlan-FK-)
* Todos las PK son autonumericas
* No hay relaciones muchos a muchos, una materia no puede estar en dos carreras ni en dos planes, tampoco una carrera en dos planes.
Como quiere la clave el profesor que en el id de la materia ya tenga el plan carrera y curso
Ej: Id_materia: 20002317
2000(Nombreplan)2(IDcarrera)3(CursoMateria)17(el identificador de la materia)
El profesor nos dijo que con esa clave primaria podríamos consultar varios datos solo en el idmateria, lo vi muy lógico, pero a la hora de armar el código se me complica.
A vos que te parece:
¿Es bueno armar el IDmateria de esa forma?
¿Estaba bien armada anteriormente la tabla?
¿No es "malo" armar una clave primaria de 9 o más dígitos?
Bueno espero tu opinión al respecto y si debo armar la clave primaria como nos pidió el profesor espero que me puedas dar una mano en el futuro.
Gracias desde ya por la ayuda, saludos!

1 respuesta

Respuesta
1
Como lo veo están bien organizadas tus PORQUE pues se relacionan las tablas correctamente y ademas puedes administrar de una manera eficiente tu base de datos (ej. Para updates o deletes en cascada). Como tu profesor te lo sujiere no necesitas las FK y en caso de dejarlas tendrías redundancia de datos ademas cuando hagas un select que involucre a otras la tablas en los JOIN tendrías que usar substring para segmentar la llave primaria y hacer la union con las otras tablas ejemplo:
Select * from tblMateria m inner join tblPlan p on substring(m.IDmateria,1,4) = p.IDplan
La llave primaria se puede usar asta el máximo de lingitud que te permita tu tipo de datos sin sacrificar nada en el performance de la base de datos por tanto no es "malo" siempre y cuando te lo permita el tipo de datos, aunque si puede llegara ser confusa y poco manejable para el usuario una clave muy larga.
Suerte

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas