zoukankan      html  css  js  c++  java
  • 数据库设计

    我个人比较熟悉的是mysql,我就说说我经历过的项目的数据存储方式。
    不管怎么设计玩家表是必不可少的
    1.以系统建表
    这种建表方式就会有很多的表,这种设计一般字段都是简单数据类型,不会用blob.这样设计数据库的人他们是函数式思想,他们的游戏系统应该也是独立于玩家的,比如背包系统
    玩家对象里面只存一个背包Id,背包管理系统管理所有玩家的背包,管理背包Id和背包对象,就是他们设计上,玩家和背包是一样的,都有对象和管理类,通过背包Id去关联。这样的设计系统之间的耦合度比较低,
    凡是都是正反面的,这样的设计由于系统之间耦合度比较低,开发系统就相对于对其他系统没什么依赖性,但是人物调用背包系统的时候还得去背包管理系统拿数据,就假如背包Id搞错了
    就拿到别人的背包了。
    2.就一个表
    这样的数据库设计就只有一个玩家表,这种设计一般字段都是Blob的数据类型,这样设计数据库的人他们是面向对象的思想,他们的游戏系统是依附于玩家系统的,比如背包系统
    玩家对象里面直接初始化背包对象,背包管理系统就只管理一个玩家的背包,通过玩家对象可以直接拿到他的背包,这样就不会存在拿错背包的情况。这样的设计系统之间耦合度就比较高,
    这样的设计的话,那么加字段是比较麻烦的,我们当初的设计是字段之间用的特殊符号分隔,然后用64bit压缩,统计数据比较麻烦。字段是有顺序的,加字段也只能在后面加,也不能删除字段。
    3.也是一个表
    也是只有一个玩家表,也是Blob的类型,但是利用了json,打包解包,字段可以随便加了,也好统计,php是能解析json的。但是由于引入了key,所以储存了多余的数据。

    Json::Value BagCell::ToJson()
    {
    	Json::Value root;
    	root["TemplateID"] = m_nItemTemplateId;
    	Json::Value attrList;
    	TUint16 nTotalLen = m_DynamicAttr.GetLen();
    	for (TUint16 i = 0; i < nTotalLen; i++)
    	{
    		Json::Value attr;
    		tagDynamicAttr &pAttr = m_DynamicAttr.GetData(i);
    		if(pAttr.Key != TAG_DYNAMICATTR_SIZE)
    		{
    			attr["key"] = pAttr.Key;
    			attr["value"] = pAttr.Value;
    			attrList.append(attr);
    		}
    	}
    	root["AttrList"] = attrList;
    	return root;
    }
    bool BagCell::FromJson(Json::Value& root)
    {
    	m_nItemTemplateId = root.get("TemplateID", -1).asInt();
    	m_DynamicAttr.clear();
    	Json::Value &attrList = root["AttrList"];
    	for (Json::Value::iterator it = attrList.begin(); it != attrList.end(); ++it)
    	{
    		Json::Value &node = *it;
    		tagDynamicAttr attr;
    		attr.Key = node.get("key", 0).asInt();
    		attr.Value = node.get("value", 0).asInt();
    		m_DynamicAttr.Add(attr);
    	}
    	return true;
    }
  • 相关阅读:
    HTML元素解释
    Java命名规范
    HDU 1058 Humble Numbers(DP,数)
    HDU 2845 Beans(DP,最大不连续和)
    HDU 2830 Matrix Swapping II (DP,最大全1矩阵)
    HDU 2870 Largest Submatrix(DP)
    HDU 1421 搬寝室(DP)
    HDU 2844 Coins (组合背包)
    HDU 2577 How to Type(模拟)
    HDU 2159 FATE(二维完全背包)
  • 原文地址:https://www.cnblogs.com/byfei/p/6389806.html
Copyright © 2011-2022 走看看