2010-10-02 13 views
5

Supongamos que tengo Tutors que toman online webclasses y crean learning packs. Tanto online webclasses y learning packs se pueden clasificar por students y finalmente una calificación de tutor's es el promedio simple de todas las calificaciones en su classes y packs.Mysql - Una pregunta simple de diseño de base de datos

Esta es la arquitectura mesa de nuestra actual Ratings mesa -

CREATE TABLE IF NOT EXISTS `Ratings` (
    `id_rating` int(10) unsigned NOT NULL auto_increment, 
    `id_teacher` int(10) unsigned default NULL COMMENT 'the teacher who created the class/pack', 
    `id_lp` int(10) unsigned default NULL COMMENT 'the id of the learning pack', 
    `id_wc` int(10) NOT NULL default '0' COMMENT 'the id of the webclass', 
    `id_user` int(10) unsigned NOT NULL default '0' COMMENT 'the user who has rated', 
    `rate` int(10) unsigned NOT NULL default '0', 
    `cdate` timestamp NOT NULL default CURRENT_TIMESTAMP, 
    `udate` timestamp NULL default NULL, 
    PRIMARY KEY (`id_rating`), 
    KEY `Ratings_FKIndex1` (`id_user`), 
    KEY `id_lp` (`id_lp`), 
    KEY `id_wc` (`id_wc`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

la actualidad, tanto la clase y embalar calificaciones se introducen en la misma mesa (id_wc y id_lp se introducen en consecuencia - uno se introduce y el otro es NULL para cada registro de calificación).

lo tanto, mi pregunta es -
¿Es esta arquitectura correcta o es mejor mantener class y pack clasificaciones separadas? ¿Por qué o por qué no? Necesito exactamente el mismo número de campos de tabla Rating para class y pack calificación.

Supongo que, si las clasificaciones de clases y paquetes se encuentran por separado, entonces las tablas separadas reducirían la cantidad de registros que se buscarán. Pero, dado que en nuestro caso solo se necesitan calificaciones del tutor (involucra tanto a la clase como a los paquetes), es por eso que todas las calificaciones se combinan.

+0

Use el banco de trabajo mySQL incluso lo hacen los desarrolladores de mysql. –

Respuesta

0

Si crees que terminarás teniendo más entidades que requerirán calificación, entonces necesitas crear algo más genérico (y no muy compatible con la filosofía de la db).

ratings 
------- 
id 
voterClass 
voterId 
subjectClass 
subjectId 
vote 
date(s) 

Al utilizar este diseño se olvida de FK y la integridad referencial. Pero es muy flexible, y usar los índices correctos es muy escalable. Además, cuando las entidades (sujetos) son eliminadas, los votos permanecen. Este diseño le evita duplicar campos y tablas.

3

Un modelo un poco más detallado.

  • Un profesor en una universidad también puede tomar clases.
  • Una clase puede tener más de un maestro.
  • Puede haber varias clases sobre la misma materia, impartidas por diferentes profesores.
  • Solo los estudiantes que participan en las clases pueden votar (calificar) la clase.
  • Los paquetes de aprendizaje tienen una asignatura (matemática, biología).
  • Un paquete de aprendizaje puede tener varios autores.
  • Técnicamente, un estudiante también puede crear un paquete de aprendizaje.
  • Solo los miembros que usan un paquete de aprendizaje pueden calificar un paquete.
  • Aunque los autores pueden votar por los paquetes y los maestros pueden votar por sus clases, esos votos son ignorados.

alt text

Si sólo está interesado en la tabla de clasificaciones, se puede utilizar:

alt text

O combinar ambos modelos en algo así como:

alt text

+0

gracias por contestar con estas lindas imágenes, pero ¿pueden explicarme un poco cómo es esta arquitectura mejor? Solo estoy interesado en la tabla de calificaciones y solo hasta el sistema que describí (solo esas entidades: tutores, clases y paquetes). –

0

Utilice mySQL workbench. Es multiplataforma y funciona genial.

MySQL workbench visurally see what you are doing with your database. http://diariolinux.com/wp-content/uploads/2008/08/wb51linuxpreview2a.png

MySQL Workbench también cumple con todos los criterios para general-purpose-remote-data-backup-and-download-including-innodb-support pregunta sobre stackoverflow

Por cierto: Uso <ctrl>+<G> que transmita diseñar una base de datos.

+0

@ JamesM-SiteGen- En realidad, solicité aquí una sugerencia/idea para el diseño de la base de datos. La herramienta que sugirió puede ser útil en general, pero no puedo ver cómo responde directamente mi pregunta. Si pudieras elaborar un poco? Puede considerar poner esto como una solución a http://stackoverflow.com/questions/4710954/general-purpose-remote-data-backup-and-download-including-innodb-support question. –

+0

Claro que está hecho .. –

Cuestiones relacionadas