Estoy tratando de imitar algo similar a FB. Básicamente, los usuarios pueden publicar comentarios en varias partes del perfil de un usuario (por ejemplo, "muro", "foto", etc.). Creo que el siguiente modelo funcionará:Modelado de base de datos: Facebook me gusta mensajes
===========================
wall_message
===========================
- id (PK)
- parent_id (FK)
- wall_owner_profile_id (FK, identify whose wall the message is for)
- poster_profile_id (FK)
- message
- timestamp
===========================
media_message
===========================
- id (PK)
- parent_id (FK)
- media_id (FK, identify which photo, video, etc.)
- poster_profile_id (FK)
- message
- timestamp
parent_id
permite que los mensajes sean "agrupados" en una discusión relacionada. El primer mensaje parent_id
será 0 y los mensajes subsiguientes tendrán PK como el valor parent_id
(creando una relación padre-hijo).
poster_profile_id
identifica quién ha publicado el mensaje.
Las dos tablas anteriores son muy similares. ¿Sería una buena idea para combinarlos, tales como:
===========================
message
===========================
- id (PK)
- parent_id (FK)
- type (ENUM: "wall", "media", etc.)
- types_id (FK, see explanation below)
- poster_profile_id (FK)
- message
- timestamp
En este caso, si, por ejemplo, type
es "pared", entonces types_id
es igual a "wall_owner_profile_id" de la primera tabla. Si, por ejemplo, type
es "media", entonces types_id
es igual a la segunda tabla media_id
.
Estoy un poco preocupado de que el segundo enfoque requiera una columna para explicar el significado de otra columna. Una desventaja de esto, supongo, es que no habría integridad referencial para types_id (a diferencia de "wall_owner_profile_id" y "media_id").
¿Cuál sería la mejor manera de abordar este problema?
EDIT 1:
parece que esta es la solución hasta el momento:
===========================
message
===========================
- message_id (PK)
- parent_message_id (FK)
- profile_id (FK, referring to who posted the message)
- message
- subject (applicable only for emails)
- timestamp
===========================
wall_message
===========================
- message_id (FK)
- profile_id (FK, referring to who received the message/owner of wall)
===========================
media_message
===========================
- message_id (FK)
- media_id (FK)
===========================
email_message
===========================
- message_id (FK)
- profile_id (FK, referring to who received the message)
¿Ha revisado el nuevo modelo de datos? – PerformanceDBA