And*_*rea 6 sql oop polymorphism orm nosql
我想为一组玩家建模数据库实体.每位玩家应该:
实现这样一个实体的最佳方式是什么(关系数据库和非关系数据库对我来说都没问题)?
最简单的解决方案当然是为每个角色保留一个不同的表.我也找到了这个答案,这很好但是7岁,可能已经过时了.其他想法?
这是一个示例数据集:
"name": "name1"
"role": "attack"
"strength": 10
"constitution": 5
"name": "name2"
"role": "attack"
"strength": 7
"constitution": 7
"name": "name3"
"role": "defense"
"health": 8
"resistence": 8
"name": "name4"
"role": "defense"
"health": 10
"resistence": 10
"name": "name5"
"role": "support"
"mana": 4
"willpower": 3
Run Code Online (Sandbox Code Playgroud)
Chr*_*phe 12
数据的OO结构
你已经确定了几个班,你的Character人口,这是从抽象的作用而成,即Attack,Defense和Support.每种角色都有不同的属性,具体取决于类.
因此,您清楚地了解了OOP设计,并希望在数据库中实现它.可以使用几种设计模式:
Defense)和父类表(这里Character)之间的1:1关系.这似乎有点矫枉过正name场.再次,这似乎有点矫枉过正.课程或关系?
您还可以考虑另一种模型.它是一个类似于设计的组件,基于组合(在关系的SQL模式中):
character表,一个id, name和role id,a property-id(或名称)和a value.如果你想要非常灵活和富有创造力并且发明其他属性(例如"有武器A","有武器B","装甲强度"等),可以建议这样做.但是,如果你打算坚持相对于当前的属性,这将再次过度杀伤.
无SQL
如果您想考虑非关系数据库(通常是No-SQL数据库),那么您可以考虑基于文档的数据库,它们非常适合处理类似于单继承表的结构.
如果您选择组件设计,那么键值存储也可以作为选择,但您仍然需要组装这些组件.这是额外灵活性的代价;-)
你说多态?
多态性取决于与类相关的行为,而不是描述对象的数据.因为这里不是行为问题,我想你的意思是处理不同类型的数据(所以它更多的是关于类).如果我在这一点上错了,请告诉我.
但是,您应该在问题中使用多态,因为它可以帮助其他不太了解OOP术语的人找到类似问题的解决方案
| 归档时间: |
|
| 查看次数: |
3056 次 |
| 最近记录: |