如何在关系数据库中为少量固定数量的选项保存多对多数据?

问题描述

我有一个 CakePHP 4 模型 Organisation,它应该保存组织所拥有的“类”。有三个固定选项在不久的将来不太可能改变,并且可以应用任意数量的选项(例如,没有,或者只有第一个和第三个)。

选项 1:连接表

现在对关系数据库执行此操作的方法是创建一个新表 (classes),用这三个选项填充它并使用连接表 (classes_organisations) 来表示许多-对多绑定。尽管为具有三个固定选项的小东西创建两个额外的数据库表,但对我来说似乎有点乏味

选项 2:布尔列

一个选项是为每个选项添加一个布尔列。但这似乎也不是一个干净的解决方案。如果有五个选项呢?如果有更多这些多选项类,比如“字段”(我至少会有一个)怎么办。列数会快速增长,并且会使表格变得混乱。

选项 3:json

然后是 json。起初对我来说这似乎是最好的解决方案(classes 只有一个数据列,没有额外的数据表和模型),但它也有一些缺点。一方面,它不可查询(尽管对我的项目来说不是问题)。另一个问题是序列化。它不能添加Cake\ORM\Entity getter/setter 中,因为它会在保存时再次反序列化(它为此使用了 getter)。 Cake\ORM\Table 确实提供了可用于序列化的 beforeSave 方法,但没有在查询数据库进行反序列化后立即触发的方法。 最后,MysqL 5.7+ 具有原生 json 支持,但并非所有生产数据库都更新到此级别(根据我的经验),而且 Phinx migrations plugin不支持

那么在这种情况下,哪些选项最适合使用?这个事情谁有经验?我是否忘记了这篇文章中的任何优点/缺点甚至整个解决方案?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...