一个游戏交易网的数据库设计,求指点

2015-09-11 10:17:57 +08:00
 cevincheung

类似 5173 ,不用多说什么了吧。

现在的设计如下:

item_category商品分类主表

id:
name:商品分类名称(装备、金币、账号等)

game_category游戏分类表

id:
name:游戏分类名称(网页游戏,客户端游戏,手机游戏)

game系统支持的游戏列表

id:
name:游戏名称
game_category_id:游戏分类 id

game_attr游戏属性表

id:属性 id,自增
name:属性名称(如法师、侏儒、精灵,其实这个表只有账号、装备有用)
item_catetory_id:商品分类 id (这个属性属于什么分类比如装备、账号、金币)

item商品表

id:
name:商品名称
game_id:游戏 id
item_category_id:商品分类 id

item_attr_relation商品属性对照表

item_id:商品 id
game_attr_id:属性 id

然后一些应用场景:
根据属性进行筛选商品获取列表

获取装备为“地精”的商品列表,假设地精 id 为 1 ,商品分类“装备”的 id 为 1

select * from item where item_category_id = 1 and id in (
    select item_id from item_attr_relation where game_attr_id =1
)

但是明显数据库的设计有不合理的地方,游戏属性就是类似淘宝的选择手机,就出现品牌、 RAM 大小、操作系统。选择衣服出现品牌、尺寸等分类下细分条件筛选场景。
应用到这里就是装备的等级、职业、性别筛选。账号的对应属性筛选,比如如果卖 QQ 号就要可以筛选等级( 0-10 级),账号的性别、职业等。

哪里不合理求指点(小创业公司木有专业的 DBA - -#),搜索用 elasticsearch 所以还要考虑到结合创建索引的问题。

3376 次点击
所在节点    MySQL
3 条回复
lavadore
2015-09-11 10:44:44 +08:00
...这个还真不是一两句话就能说清楚的
cevincheung
2015-09-11 10:47:23 +08:00
@lavadore 可以大胆胡说嘛 :doge:
badaciacia
2015-09-11 11:03:30 +08:00
我倾向于把这种表结构

game 系统支持的游戏列表
id:
name: 游戏名称
game_category_id: 游戏分类 id

设计为 2 张表

game 系统支持的游戏列表
id:
name: 游戏名称


游戏,分类映射表
id:
game_id
game_category_id: 游戏分类 id

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/219864

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX