这是我很长一段时间以来一直想知道的事情,但还没有看到真正的(好的)解决方案。这是我想象很多游戏都会遇到的问题,而且我无法轻易想到如何解决(好吧)。欢迎提出想法,但由于这不是一个具体的问题,所以不要费心询问更多细节 - 只是弥补它们!(并解释你的编造)。
好的,所以,许多游戏都有(库存)物品的概念,而且通常有数百种不同种类的物品,所有物品的数据结构通常都非常不同 - 有些物品非常简单(“一块石头”),其他物品可以有疯狂的复杂性或背后的数据(“一本书”、“一个编程的计算机芯片”、“一个装有更多物品的容器”)等。
现在,这样的编程很容易——只要让所有东西都实现一个接口,或者扩展一个抽象的根项。由于编程世界中的对象不必在内部和外部看起来相同,因此任何类型的项目具有多少和什么样的私有字段确实没有问题。
但是当涉及到数据库序列化(二进制序列化当然没问题)时,您将面临一个难题:您将如何在典型的 SQL 数据库中表示它?
我已经看到了一些解决方案的尝试,但没有一个令我满意:
项目的二进制序列化,数据库只保存一个 ID 和一个 blob。
- 专业人士:实施大约需要 10 秒。
- 缺点:基本上牺牲了所有数据库功能,难以维护,几乎不可能重构。
每个项目类型的表。
- 优点:干净、灵活。
- 缺点:随着种类繁多的表出现数百个,每次搜索项目都必须查询它们,因为 SQL 没有表/类型“引用”的概念。
一张表,其中包含许多并非每个项目都使用的字段。
- 专业人士:实施大约需要 10 秒,仍然可以搜索。
- 缺点:浪费空间,性能,从数据库中混淆以判断正在使用的字段。
一些带有一些“基本配置文件”的表用于存储,其中相似的项目被放在一起,并为不同的数据使用相同的字段。
- 专业人士:我什么都没有。
- 缺点:浪费空间,性能,从数据库中混淆以判断正在使用的字段。
你有什么想法?您是否见过另一种效果更好或更差的设计?