Título: Ayuda bbdd Publicado por: Shester1996 en 1 Noviembre 2019, 23:32 pm Ayuda :¬¬ ¿esta bien esta relacion 1 a 1?
Código
Edit del mod: agregando etiquetas de código. Título: Re: Ayuda bbdd Publicado por: JuanjoXD en 2 Noviembre 2019, 07:04 am Te falta ponerle un autoincremental a la PK de la tabla Profesor.
Si te animas a hacer una relación muchos a muchos tambien funcionaría mejor. Ya que un curso puede cambiar de profesor y tener así dos profesores (ej.: suplente, titular, etc) Título: Re: Ayuda bbdd Publicado por: WHK en 2 Noviembre 2019, 17:43 pm Hola, te sugiero lo siguiente (esto está en postgres 10):
Código
Primero, no necesitas indicar el id del curso en la tabla del profesor, si llevas esto a la práctica no podrás crear la tabla profesores porque la tabla de cursos aun no existe y de todas maneras tampoco podrías ingresar un registro de profesor porque no existe el registro de curso y al reves, no puedes crear un curso porque no existe el profesor. Segundo, debes declarar tus columnas si podrán estar nulos o no, esto es importante para mantener la integridad de la tabla. Tercero, he agregado un identificador uuid para evitar exponer los id del lado del usuario y enumerar items, esto se considera una vulnerabilidad. Cuarto, he utilizado bigint como id primario para aumentar la cantidad de registros soportados, esto añade escalabilidad a tu proyecto. Quinto, he traducido las columnas y tablas al inglés, esto es una buena práctica, que tu sitio funcione con textos en español no quiere decir que el código deba estar en español, esto también ayuda en la escalabilidad del proyecto cuando necesites contratar a mas desarrolladores fuera de tu pais cuando el proyecto crezca. Notas: Si te fijas, he mantenido el id separado del identificador, una opción hubiera sido utilizar únicamente el uuid como llave primaria pero esto aumentaría el coste de carga de la base de datos, por eso debes usar el id de manera interna para tus joins y el identificador para manipular desde tu front-end. La opción de cascada al eliminar se la puse para mantener la integridad de los datos, así si borran el profesor sus cursos también se eliminan ya que hemos declarado ese campo como no nulo, si quieres que el curso se mantenga entonces el campo debe ser nullable y la cascada debiera ejecutar un set null: Código
Si te fijas, esta es una tabla de 1 a muchos, normalmente la tabla de 1 a 1 no debiera existir o no se debiera enseñar, pero en la práctica si es posible hacer esto aunque es un concepto complejo y útil en casos muy específicos, en tu caso no aplica, pero: Una tabla de 1 a 1 quiere decir que un profesor sólo puede tener un curso y un curso sólo puede tener un profesor, esto en la práctica es imposible pero se puede solucionar de dos maneras: usando una tabla intermedia con dos llaves que les sean imposibles repetir o estableciendo el id del profesor de la tabla cursos como valor único. Veamos: Código
De esta manera un profesor no podrá tener más de un curso y un curso no podrá tener más de un profesor, aunque esto es ridículo, pero esto sería de 1 a 1. Será que tu profesor te ha querido gastar una broma? Saludos. |