« first day (1233 days earlier)      last day (1865 days later) » 

3:04 PM
Hay alguien por aqui con experiencia en SQL?
Quiero modelar en una base de datos un problema en el que tengo un conjunto de usuarios, cada uno de los cuales puede tener una lista de, digamos, mensajes. Fácil. Tabla usuarios, tabla mensajes con relación uno a muchos (en la tabla mensajes hay como clave foránea el id del usuario que lo creó)
mi problema es que quiero limitar los mensajes de cada usuario a sólo los 5 últimos
si un usuario emite un sexto mensaje, se eliminará el primero
entiendo que puedo hacerlo con operaciones SQL, pero mi pregunta es si no habrá un mecanismo que lo evite. Algún atributo de la tabla que le diga "maximo de entradas por usuario = 5" o algo así, y que sea el propio motor de la base de datos el que se ocupe de mantener esa restricción
 
3:34 PM
@abulafia en general las bases de datos no tienen ese tipo de restricciones. Esa clase de reglas de negocios o se programan en tu sistema, o podiras hacer un SP que devuelva un error si quiere poner una entrada de mas, controlando antes la cantidad de mensajes...
 
3:54 PM
@gbianchi Gracias. He estado mirando algunas consultas similares en SO. Algunas respuestas dicen añadir un trigger que detecte cuando excedes ese límite. Otras recomiendan no checarlo en la aplicación, sino obviar esa restricción y luego mediante una tarea cron "limpiar" la base de datos periódicamente de las entradas antiguas
Me parece todo bastante chapucero... Supongo que otra opción es no usar una tabla de mensajes, sino meter esos mensajes en una lista json en la tabla de usuarios
 
@abulafia todas son opciones validas... ahora esta en cada uno como controlar eso...
 
si la base de datos soporta tipos json, claro
 
@abulafia esa.. por lo menos a mi.. me parece la peor opcion de todas... la pregunta es porque harias algo asi?
 
Son los requisitos del problema
 
pero hacer un json me parece la peor opcion de todas...
vuelvo a preguntar.. porque escribirias todos los mensjaes del usuario en una sola fila en una sola columna?
 
3:57 PM
Es un servicio en el que los "usuarios" son "cosas" (iot) y los mensajes pueden rápidamente hacer crecer la base de datos demasiado
y no se necesitan los datos antiguos (pues otros procesos pueden ir extrayéndolos a otros almacenes persistentes)
En IoT las bases de datos que suelen usarse son no-relacionales (MongoDB, CouchDB, etc.) y se trabaja básicamente con json
 
todo eso lo entendi.. lo que no estoy nada de acuerdo es guardar los mensajes en un json...
 
pero quería intentar implementarlo en una SQL
 
@abulafia pero porque son mensajes no estructurados... eso esta bien...
 
Es que de hecho lo son en mi caso. La tabla de "mensajes" en el fondo guardará json
cada mensaje recibido y guardado en esa tabla es un json
pensaba guadarlo como string
y ya puestos, ¿por qué no guardar también como json la lísta de los últimos 5 mensajes?
me evitaría la segunda tabla y los problemas de imponerle un límite
como motor usaré PostgreSQL, que soporta JSON como uno de los tipos a guardar
es decir, no lo guarda como string, sino como JSON, e incluso permite hacer queries sobre los campos del json, aunque eso no lo necesito tampoco. Para mi el json en cuestión es "opaco" (lo mismo me da lo que contenga, solo la "cosa" que lo envió conoce su estructura)
quiero implementar una especie de "clon" de dweet.io
 
ok. no suena ilogico...
por algo no hay una solucion definitiva a una base de datos
 

« first day (1233 days earlier)      last day (1865 days later) »