下面是一些我已经想了很长时间的事情,而且还没有看到真正的(好的)解决方案。这是一个问题,我想象许多游戏有,我不能轻易地想到如何解决(好)。想法是受欢迎的,但由于这不是一个具体的问题,不要费心地要求更多的细节-只是捏造!(并解释你编的是什么)。
好的,很多游戏都有(库存)项目的概念,而且通常有数百种不同的项目,所有的数据结构都是非常不同的--有些项目非常简单(“一块石头”),还有一些项目背后可能有疯狂的复杂性或数据(“一本书”,“一个编程的计算机芯片”,“一个有更多项目的容器”)等等。
现在,这样的编程很容易--只要让所有的东西都实现一个接口,或者扩展一个抽象的根项。由于编程世界中的对象不需要在内部和外部看起来相同,所以对于任何类型的项目都有多少个私有字段和什么类型的私有字段没有问题。
但是,当涉及到数据库序列化(二进制序列化当然没有问题)时,您将面临一个难题:您将如何在一个典型的SQL数据库中表示这个问题?
我曾见过一些解决办法的尝试,但我没有一次感到满意:
- Pro's: takes like 10 seconds to implement.
- Con's: Basically sacrifices every database feature, hard to maintain, near impossible to refactor.
- Pro's: Clean, flexible.
- Con's: With a wide variety come hundreds of tables, and every search for an item has to query them all since SQL doesn't have the concept of table/type 'reference'.
- Pro's: takes like 10 seconds to implement, still searchable.
- Con's: Waste of space, performance, confusing from the database to tell what fields are in use.
- Pro's: I've got nothing.
- Con's: Waste of space, performance, confusing from the database to tell what fields are in use.
你有什么想法?你有没有见过另一种效果更好或更差的设计?
发布于 2013-03-01 19:31:50
这取决于您是否需要对这些属性进行排序、筛选、计数或分析。
如果你使用EAV,那么你会很好地自毁自己。尝试在EAV架构上做报告。
最好的选择是使用表继承:
PRODUCT
id pk
type
att1
PRODUCT_X
id pk fk PRODUCT
att2
att3
PRODUCT_Y
id pk fk PRODUCT
att4
att 5对于不需要搜索/排序/分析的属性,请使用blob或xml
发布于 2018-03-28 20:17:35
我有两种选择:
发布于 2013-03-01 18:48:52
是的,像这样设计数据库格式是件很痛苦的事。我正在设计一个通知系统,并且遇到了同样的问题。然而,我的通知系统并不像您的系统那么复杂--它保存的数据最多只有ids和用户名。我目前的解决方案是混合1和3-我序列化的数据是不同的每一个通知,并使用一个列的2个用户名(有些可能有2或1)。我回避方法2,因为我讨厌那个设计,但可能只有我一个人。
但是,如果您能够负担得起,我建议您在RDBMS领域之外思考--听起来,非RDBMS(特别是键/值存储)可能更适合存储这些数据,特别是如果项目1和项2与每个项目有很大的不同。
https://stackoverflow.com/questions/15164585
复制相似问题