sql - 当附加数据取决于外键值时,我应该创建多个表或一个 json 列
问题描述
我想存储票务系统用户采取的行动。根据操作的类型,我可能需要存储额外的数据,并且数据结构将根据操作类型而有所不同。
例如,当用户发布消息时,我想存储消息 ID。
当用户合并两张票时,我想存储原始票号和合并后的票号。
当用户更改状态时,我想存储上一个和下一个状态。
等等。
考虑到这些例子,我注意到以下几点:
- 收集的数据数量变化
- 收集的数据类型发生变化
使用如下所示的操作表:
行动 |
---|
ID |
动作类型ID |
日期 |
用户身份 |
票号 |
动作类型 |
---|
ID |
蛞蝓 |
有没有比创建尽可能多的表更好的选择,因为有不同的操作类型和必要的列 IE
ActionMessagePosted |
---|
ID |
动作类型ID |
消息ID |
ActionTicketMutations |
---|
ID |
动作类型ID |
...(每个可能的字段及其上一个和下一个值) |
或者
在我的 Actions 表中添加一个包含所需值的文本列作为 json?(出于技术原因,我无法创建 Json 列)
解决方案
推荐阅读
- active-directory - Export-Csv 无法将参数绑定到参数“InputObject”,因为它为空
- javascript - JavaScript Spawn:如何在 Spawn python 脚本中将变量传递给 FLAG
- android - 如何,Android底部导航栏永久隐藏或禁用
- php - 使用 Bootstrap 4 和 PHP 发送邮件
- reactjs - 从函数 React Native 获取字符串结果
- c# - 如何在 Azure 搜索 SDK 中的关键字之间指定 AND 和 OR 搜索?
- python - 不能用 XPath 细化元素文本
- php - 如何在 PHP 中将逗号分隔的键值字符串转换为关联数组
- c# - [A]Oracle.ManagedDataAccess.Client.OracleParameter 无法转换为 [B]Oracle.ManagedDataAccess.Client.OracleParameter
- flutter - Flutter如何重构小部件列表