数据库设计——如何存储和使用灵活的自定义用户事件?

Database Design - How to store and use flexible custom user events?

我正在努力思考如何设计数据库(在我的例子中是 postgresql)来存储灵活的自定义事件。我的想法是不必为我要跟踪的每个新事件创建不同的行。

这是它的第一个想法:

这里的问题是使用其他工具(例如 excel 或 Tableau)进行分析变得相当困难,因为现在行的传统名称作为值包含在内。

鉴于之前的数据,这里的结构可能更适合分析,因为行名称是特定事件:

总结一下我的问题:我怎样才能正确存储具有变量 key 和不同类型 value 的事件?

沿用最初的 key/value 设计。

您的 table 的结构对数据的呈现没有影响,例如,如果您将它们导出以用于电子表格。导出数据时,您始终可以使用

这样的查询
SELECT timestamp, user_id,
       jsonb_object_agg(key, values)
FROM (SELECT timestamp, user_id, key
             jsonb_agg(value) AS values
      GROUP BY timestamp, user_id, key) AS q
GROUP BY timestamp, user_id;