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

Sugerencia diseño base de datos

Estas en el tema de Sugerencia diseño base de datos en el foro de Mysql en Foros del Web. Hola... Como dice el título del post... sugerencias de diseño para el siguiente requerimiento : [requerimiento] En un colegio (para un nuevo sistema), existen profesores, ...
  #1 (permalink)  
Antiguo 17/11/2010, 11:39
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Sugerencia diseño base de datos

Hola...

Como dice el título del post... sugerencias de diseño para el siguiente requerimiento:

[requerimiento]
En un colegio (para un nuevo sistema), existen profesores, padres de familia, alumnos, coordinadores, director, secretaria.

Se debe tener en cuenta que un profesor puede ser padre de familia a la vez, y también en dado caso ser coordinador.

También, debido a esto, una persona puede tener varios perfiles ó roles (puede ser profesor, pero a la misma vez director de grupo y pueder ser también, director de área).
[/requerimiento]

Bueno, mi pregunta: es viable entender a todos como "personas" y crear una tabla llamada "persona" y luego crear tablas "hijas" que se especializen en los datos específicos? O es mejor crear una tabla para cada "tipo" diferente (osea, crear una tabla estudiante, una tabla profesor?).

Leo sugerencias

Gracias
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #2 (permalink)  
Antiguo 17/11/2010, 12:23
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Sugerencia diseño base de datos

Saludos carlx tiempo sin verte por estos lados.

En mi opinión es mucho mejor tener una unica tabla persona con los campos que tienen en común todas las personas. Aparte tener tablas especificas que hereden dichos atributos de los cargos donde se ven influenciadas las personas.

No se que motor de base de datos vayas a manejar, pero si es postgresql o con oracle, es valido realizar TYPES o crear tablas que hereden de otras. En mysql no conozco una forma de hacerlo (Creo que no existe) pero puedes establecer las relaciones con llaves foraneas.


saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 17/11/2010, 13:16
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Sugerencia diseño base de datos

Gracias por tu respuesta huesos52

Y cómo harías (específicamente), la representación de que un profesor podría ser un coordinador y un director de área? O cómo manejarías que un estudiante puede ser personero o monitor?

Pienso que representar todos esos roles y/o tipos en tablas apartes me generaría complejidad a la hora de realizar las consultas y a la hora de generar reportes de un curso o de un área.

Dices que con postgres se podría hacer. Tienes un ejemplo? En dado caso, estudiaría la posibilidad de crear la DB con ese motor. Por ahora ando mirando en MySql.

[offtopic]
La verdad es que el trabajo me tiene refull, por lo que no he vuelto con la misma intensidad de antes Y más ahora que es final de año, el sector educativo es un caos.
[/offtopic]
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #4 (permalink)  
Antiguo 17/11/2010, 14:05
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Sugerencia diseño base de datos

por ejemplo:
Código SQL:
Ver original
  1. pruebas=> CREATE TABLE persona(codigo INTEGER PRIMARY KEY,nombre_completo TEXT,direccion TEXT,telefo
  2. no TEXT);
  3. NOTICE:  CREATE TABLE / PRIMARY KEY will CREATE implicit INDEX "persona_pkey" FOR TABLE "persona"
  4. CREATE TABLE
  5. pruebas=> CREATE TABLE profesor(materias TEXT) INHERITS (persona);
  6. CREATE TABLE
  7. pruebas=> CREATE TABLE monitor(materia TEXT) INHERITS (persona);
  8. CREATE TABLE
  9. pruebas=> INSERT INTO profesor VALUES(2,'DIEGO LOPEZ','CRA 23 NO. 74B -28','465664534','algebra');
  10. INSERT 0 1
  11. pruebas=> INSERT INTO monitor VALUES(2,'DIEGO LOPEZ','CRA 23 NO. 74B -28','465664534','filosofia');
  12. INSERT 0 1

Fijate que las tablas heredadas solo tienen campos que son unicos. Y hereda todo lo que una persona pudiera tener.

En este caso, diego lopez es monitor y profesor al mismo tiempo (un ejemplo rapido) y todo hace parte de una super tabla llamada persona.

Que ventajas trae trabajar de esta forma?

Imaginate que diego lopez sea coordinador, profesor y padre de familia. Se ha cambiado de casa y deben actualizar la información. En un esquema normal, tendrías que ir a cambiar en cada tabla donde haya un registro para diego lopez y actualizar la información. De esta forma, el cambio lo haces unicamente desde la tabla persona y hereda todos los cambios a sus tablas hijas.

Código SQL:
Ver original
  1. pruebas=> SELECT *FROM  ONLY monitor;
  2.  codigo | nombre_completo |     direccion      | telefono  |  materia
  3. --------+-----------------+--------------------+-----------+-----------
  4.       2 | DIEGO LOPEZ     | CRA 23 NO. 74B -28 | 465664534 | filosofia
  5. (1 fila)

si cambiamos el telefono en la tabla persona y consultamos las tablas monitor y profesotr los cambios son heredados.

Código SQL:
Ver original
  1. pruebas=> UPDATE persona SET telefono = '567890' WHERE codigo=2;
  2. UPDATE 2
  3. pruebas=> SELECT *FROM  monitor;
  4.  codigo | nombre_completo |     direccion      | telefono |  materia
  5. --------+-----------------+--------------------+----------+-----------
  6.       2 | DIEGO LOPEZ     | CRA 23 NO. 74B -28 | 567890   | filosofia
  7. (1 fila)
  8. pruebas=> SELECT *FROM  profesor;
  9.  codigo | nombre_completo |     direccion      | telefono | materias
  10. --------+-----------------+--------------------+----------+----------
  11.       2 | DIEGO LOPEZ     | CRA 23 NO. 74B -28 | 567890   | algebra
  12. (1 fila)

algo así sería.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 17/11/2010, 15:05
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Sugerencia diseño base de datos

Entiendo, entiendo... no conocía este método. Ta como bueno jeje. La verdad tampoco sé si mysql permite este método.

Mientras leo, esperaré más sugerencias, pero la tuya me está como convenciendo jeje

Saludos y gracias!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #6 (permalink)  
Antiguo 17/11/2010, 15:41
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: Sugerencia diseño base de datos

Me temo que no. Por lo que sé, INHERITS sólo pertenece a Oracle y Postgre
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 17/11/2010, 16:00
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Sugerencia diseño base de datos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Me temo que no. Por lo que sé, INHERITS sólo pertenece a Oracle y Postgre
Hola gnzsoloyo, apoyas la propuesta de huesos52? o se te ocurre otra manera para resolver ese requerimiento?

Gracias!
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #8 (permalink)  
Antiguo 18/11/2010, 08:01
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Sugerencia diseño base de datos

Hola de nuevo...

Hice un "mini-DER", para que me digan como lo ven y si esa es la idea como tal (aclaro que hice el diseño en MysqlWorkbench por lo que no sé si la idea de "herencia" está bien representada).

Es viable esta propuesta?

Diseño:




Imaginen hacer una consulta del tipo: "Muéstreme el listado de estudiantes del curso tal con su respectivo director de grupo y mostrando a qué grado pertenecen".

Gracias de nuevo!

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #9 (permalink)  
Antiguo 18/11/2010, 09:46
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Sugerencia diseño base de datos

Parece bien carxl.

La consulta que dices, con unos 2 o 3 joins sale sin problemas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 18/11/2010, 10:04
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Sugerencia diseño base de datos

Hola huesos52 :) gracias por tu respuesta.

Mmm en el diseño del DER, si se maneja de esa manera la herencia así? Pues lo normal que haría, sería llamar la fk del padre pero que el "detalle" tengo su propio id. Creo que es la única manera que mysql lo permite.

Gracias de nuevo!

Saludos.
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #11 (permalink)  
Antiguo 18/11/2010, 10:09
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Sugerencia diseño base de datos

Esta es una buena forma.
Sin embargo mira esto en mysql para trabajar datos jerarquicos.

Puedes estudiar posibilidades.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #12 (permalink)  
Antiguo 18/11/2010, 14:16
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Sugerencia diseño base de datos

Si buenas... xD

Huesos52, gracias, revisé tu último link.

Creo que se adapta más la manera como lo planteé en un principio por lo mismo que dependiendo de su "rol", tiene ciertas relaciones con otras tablas. Un ejemplo, sólo las personas que tengan un rol como "director de grupo" deben tener una relación con la tabla grados, en ningún caso, una persona que pueda ser "estudiante" debe tener esa relación.

Lo que ahora se me viene en mente, osea que cada vez que necesiten un nuevo rol, toca crear una nueva tabla??

Saludos.
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #13 (permalink)  
Antiguo 18/11/2010, 14:25
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Sugerencia diseño base de datos

Cita:
Lo que ahora se me viene en mente, osea que cada vez que necesiten un nuevo rol, toca crear una nueva tabla??
Pero eso ya no es tan descabellado.
En tu analisis no creo que se generen roles a diestra y siniestra. Son cambios que serían eventuales y que mejorarían tu modelo de datos.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #14 (permalink)  
Antiguo 18/11/2010, 15:00
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 18 años, 3 meses
Puntos: 70
Respuesta: Sugerencia diseño base de datos

Vale, perfecto, pues entonces comenzaré a mejorar el diseño que dejé arriba.

Gracias por tu ayuda

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com

Etiquetas: diseño, sugerencia
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 22:21.