存储具有未知结构的对象

Storing an object with unknown structure

假设

(注意:上面的一些属性更好地反映为 E/Rs,但现在这不是重点。)

我不确定如何在字符和类型之间对这个 E/R 进行建模(我应该更改其名称,因为已经有一个属性 :type。)

我考虑过单一 Table 继承,但发现它缺乏,因为看起来所有潜在类型之间的所有属性都将存储在相同的 table 中,这看起来非常.. .笨重.

需要注意的一件事是,不需要将所有数据都存储在数据库中。

如果相同类型的角色共享相同的能力集,这些能力和类型的数量是相当静态的(不经常改变),你可以围绕一组简单的ruby 类 包含访问它所需的所有数据和方法。

另一方面,您可能想让没有适当编程知识的人添加新的 类。在这种情况下,您可以将所有信息保存为文件系统上的本地文件,例如"wod_vampire.chr"。它的内容可以是包含属性及其值的键值对的散列,也可以是包含按特定顺序排列的元素的数组。

好的,我们考虑了所有非数据库方式,但它们不适合我们。假设您使用的是关系数据库,还有几个选项。

第一个是单一 Table 继承(您已经知道这种方式)。所有可能的属性都将存储在一个 table 中,但每个 types 只会知道其中的一组特定属性并与之交互。

第二种是使用在某些现代数据库中实现的 json 数据类型(例如 Postgresql and Mysql)。这使您可以不受结构限制地存储散列(换句话说,您可以根据需要拥有任意数量的不同属性)。请注意,您可能需要实现自己的一组 getters/setters 方法来访问以这种方式存储的值。