存储具有未知结构的对象
Storing an object with unknown structure
假设
- 一个用户可以拥有多个角色
- 一个角色属于一个用户
- 角色具有基本属性名称、玩家、experience_points、状态
- 一个角色可以是许多不同类型中的一种? (工作名称)
- 我说 "be" 是因为我不确定这是否是一个 has_a 关系,其中 Type 是一个属性
- 示例类型是
- D&D5e 具有属性 class、能力、法术
- WoD吸血鬼属性,气质,意志力,世代,血统等
- WoD狼人,属性有nature、demeanor、gnosis、rage等
(注意:上面的一些属性更好地反映为 E/Rs,但现在这不是重点。)
我不确定如何在字符和类型之间对这个 E/R 进行建模(我应该更改其名称,因为已经有一个属性 :type。)
我考虑过单一 Table 继承,但发现它缺乏,因为看起来所有潜在类型之间的所有属性都将存储在相同的 table 中,这看起来非常.. .笨重.
需要注意的一件事是,不需要将所有数据都存储在数据库中。
如果相同类型的角色共享相同的能力集,这些能力和类型的数量是相当静态的(不经常改变),你可以围绕一组简单的ruby 类 包含访问它所需的所有数据和方法。
另一方面,您可能想让没有适当编程知识的人添加新的 类。在这种情况下,您可以将所有信息保存为文件系统上的本地文件,例如"wod_vampire.chr"。它的内容可以是包含属性及其值的键值对的散列,也可以是包含按特定顺序排列的元素的数组。
好的,我们考虑了所有非数据库方式,但它们不适合我们。假设您使用的是关系数据库,还有几个选项。
第一个是单一 Table 继承(您已经知道这种方式)。所有可能的属性都将存储在一个 table 中,但每个 types
只会知道其中的一组特定属性并与之交互。
第二种是使用在某些现代数据库中实现的 json
数据类型(例如 Postgresql and Mysql)。这使您可以不受结构限制地存储散列(换句话说,您可以根据需要拥有任意数量的不同属性)。请注意,您可能需要实现自己的一组 getters/setters 方法来访问以这种方式存储的值。
假设
- 一个用户可以拥有多个角色
- 一个角色属于一个用户
- 角色具有基本属性名称、玩家、experience_points、状态
- 一个角色可以是许多不同类型中的一种? (工作名称)
- 我说 "be" 是因为我不确定这是否是一个 has_a 关系,其中 Type 是一个属性
- 示例类型是
- D&D5e 具有属性 class、能力、法术
- WoD吸血鬼属性,气质,意志力,世代,血统等
- WoD狼人,属性有nature、demeanor、gnosis、rage等
(注意:上面的一些属性更好地反映为 E/Rs,但现在这不是重点。)
我不确定如何在字符和类型之间对这个 E/R 进行建模(我应该更改其名称,因为已经有一个属性 :type。)
我考虑过单一 Table 继承,但发现它缺乏,因为看起来所有潜在类型之间的所有属性都将存储在相同的 table 中,这看起来非常.. .笨重.
需要注意的一件事是,不需要将所有数据都存储在数据库中。
如果相同类型的角色共享相同的能力集,这些能力和类型的数量是相当静态的(不经常改变),你可以围绕一组简单的ruby 类 包含访问它所需的所有数据和方法。
另一方面,您可能想让没有适当编程知识的人添加新的 类。在这种情况下,您可以将所有信息保存为文件系统上的本地文件,例如"wod_vampire.chr"。它的内容可以是包含属性及其值的键值对的散列,也可以是包含按特定顺序排列的元素的数组。
好的,我们考虑了所有非数据库方式,但它们不适合我们。假设您使用的是关系数据库,还有几个选项。
第一个是单一 Table 继承(您已经知道这种方式)。所有可能的属性都将存储在一个 table 中,但每个 types
只会知道其中的一组特定属性并与之交互。
第二种是使用在某些现代数据库中实现的 json
数据类型(例如 Postgresql and Mysql)。这使您可以不受结构限制地存储散列(换句话说,您可以根据需要拥有任意数量的不同属性)。请注意,您可能需要实现自己的一组 getters/setters 方法来访问以这种方式存储的值。