02/12/2010, 10:52
|
| | | Fecha de Ingreso: agosto-2009 Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 15 años, 3 meses Puntos: 66 | |
Respuesta: Duda esquema entidad-relacion Según el diagrama que has realizado, entiendo que solo tienes un tipo de admin, experto y normal, quiero decir: no existen administradores totales, administradores de grupo, expertos en uno u otro tema etc.
Por otro lado el modelo que estás desarrollando tiene sentido si las entidades o subclases que derivan de la clase USUARIO tienen atributos diferentes, por ejemplo: imagina que solo los administradores del sitio necesitan tener registrado un teléfono de contacto obligatoriamente, puesto que ese atributo no puede pertenecer a la entidad USUARIO creamos una entidad llamada ADMIN donde insertaremos ese atributo.
En resumen, una especialización es una extensión de ciertas instancias de una clase. No tiene sentido incluir atributos en la subclase si ya están definidos en la clase (solo los identificadores para crear la relación).
Con este modelo te aseguras la escalabilidad del proyecto, ya que tienes una estructura definida y preparada para futuros cambios. La idea es definir en cada entidad los atributos necesarios y crear tantas entidades como sea necesario, ya lo dijo JC “Divide et vinces”.
Después de la parrafada te comento como veo tu esquema:
No es necesaria la entidad GRUPO ya que has dividido los usuarios en especializaciones, a lo sumo si quieres puedes poner un atributo en la entidad USUARIO llamado TipoUsuario que coja como posibles valores (admin, experto, normal) aunque no es necesario.
No es necesario incluir de nuevo el atributo passw en las entidades NORMAL, ADMIN y EXPERTO ya que está definido en la entidad USUARIO.
La interrelación registra la veo correcta ya que todos los usuarios 'en principio' pueden registrar un/os sitio/s.
La interrelación gestiona la veo correcta ya que solo los administradores pueden gestionar noticias.
La consulta para saber cuales son los sitios registrados por los usuarios expertos sería:
involucramos tres tablas experto, usuario y sitio
SELECT experto.login, usuario.nombre, sitio.url FROM (experto INNER JOIN usuario ON experto.login = usuario.login) INNER JOIN sitio ON usuario.login = sitio.login
si quieres poner una condición agregas un where al final
SELECT experto.login, usuario.nombre, sitio.url FROM (experto INNER JOIN usuario ON experto.login = usuario.login) INNER JOIN sitio ON usuario.login = sitio.login WHERE experto.login = condición
Saludos
Última edición por santris; 02/12/2010 a las 16:40 |