Ver Mensaje Individual
  #6 (permalink)  
Antiguo 02/12/2010, 10:52
Avatar de santris
santris
 
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 9 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
__________________
Tu álbum de cromos online!!

Última edición por santris; 02/12/2010 a las 16:40