首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储结构未知的对象

存储结构未知的对象
EN

Stack Overflow用户
提问于 2016-03-22 03:51:37
回答 1查看 79关注 0票数 0

假设

  • 用户可以有许多字符。
  • 属于用户的字符
  • 字符具有基本属性名称、播放器、experience_points、状态
  • 一个角色可以是许多不同的类型之一?(工作名称)
    • 我说"be“是因为我不确定这是否是一个has_a关系,其中Type是一个属性
    • 示例类型为
      • 具有属性类、能力、咒语的D&D5e
      • WoDVampire具有属性性、风范性、意志力、生成性、血缘性等特征。
      • WoDWerewolf具有属性性、风范性、觉知性、愤怒性等特征。

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

我不知道如何在字符和类型之间建模这个E/R (我应该更改它的名称,因为已经有一个属性: Type )。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-22 07:34:09

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

如果同一类型的字符共享相同的能力集,这些能力和类型数量是相当静态的(请不要频繁更改),您可以围绕一组普通的ruby类构建逻辑,其中包含访问它所需的所有数据和方法。

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

好的,所以我们考虑了所有的非数据库方式,他们并不适用于我们。假设您使用的是关系数据库,仍然有几个选项。

第一个是单一的表继承(您已经知道了)。所有可能的属性都将存储在一个表中,但是每个types只知道其中的一组属性并与之交互。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36145799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档