骑着猪猪去逛街的gravatar头像
骑着猪猪去逛街 2014-07-15 13:38:36

最代码数据库设计,期待牛哥分析~大家快来学习啦~!

牛哥,一直好奇有一个疑问,因为我发现分享与问答的数据表字段结构感觉差不多,那你在做项目设计的时候是将分享与问答分开设计数据库结构的呢?还是公用一个达到通用?包括标签设计,你是设计了2个呢还是也是公用呢?比如tag_share...tag_question?

苦于公司一直没有交流做网站的人,所以希望能和大家一起探讨一下。

期待牛哥分析解答,分享给最代码所有的粉丝们~~~~


最代码官方编辑于2014-7-18 19:01:27
所有回答列表(3)
最代码官方的gravatar头像
最代码官方  LV168 2014年7月18日

最代码的数据库设计结合了javaniu的经验,将所有主业务表设计为project表,所有业务都由该表来体现,通过字段type来区别是什么业务,对于业务间高度相同的属性就加到project表中,对于某个业务特有的属性则通过extend_json字段来表达,该这段是json字符串的,可以随意定义。

project的表结构如下:

CREATE TABLE `zuidaima_project` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `create_time` datetime NOT NULL,
  `update_time` datetime DEFAULT NULL,
  `user_id` bigint(20) NOT NULL,
  `type` int(11) NOT NULL DEFAULT '0' COMMENT '1寻求代码\r\n2分享代码\r\n3发起活动\r\n4活动日志\r\n5分享经验\r\n6发表博客',
  `title` varchar(1000) NOT NULL,
  `content` longtext NOT NULL,
  `status` int(2) NOT NULL COMMENT '-1删除\r\n0待审核\r\n2正常\r\n11寻求中31活动中',
  `extend_json` varchar(2000) DEFAULT '' COMMENT '扩展信息json,如寻求的代码数,浏览数,评论数,来源',
  `topics` varchar(500) NOT NULL DEFAULT '' COMMENT '所属话题json,如[{id:1},{id:2}]',
  `source_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '活动日志则为活动id',
  `first_sort` int(11) NOT NULL DEFAULT '0',
  `second_sort` int(11) NOT NULL DEFAULT '0',
  `third_sort` int(11) NOT NULL DEFAULT '0',
  `publish_time` datetime DEFAULT NULL,
  `from_url` varchar(500) DEFAULT NULL,
  `uuid` bigint(20) NOT NULL,
  `tags` varchar(500) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2860 DEFAULT CHARSET=utf8

至于其他表的设计,当属event的设计复杂了,我已经分享过了,地址:最代码网站中关于动态表event的设计思路

其他tag表相对就简单了,你自己来实现吧。


对于以后数据量大的问题,完全可以通过拆库拆表来做到,所以不用担心这个问题,这样在java mvc层实现代码就很简单了,我开发问答功能的时间主要在前端界面设计了,后端的代码都是现成的。

评论(0) 最佳答案
大熊的gravatar头像
大熊  LV10 2014年7月15日

数据库的表结构有可能相同,但如果是不同业务的话,就会区分开来,这是为了以后的性能问题,例如数据量达到一定量的时候做水平,垂直分割,至于是否要通用,这个看你的业务而定,标签设计的话,一般都有几套,但是这个的话,考虑复用性会多些。

endual的gravatar头像
endual  LV11 2016年4月13日

挺赞的!

我也涉及了类似的数据库,一个info作为全站内容支撑,采用parentId 和 sonId来区分业务,相同字段或者属性抽到info中表述。parentId 和 sonId 再控制业务类别,由parentId区分业务,sonId在parentId下再分。

但是,插件和扩展还是会独立建表形式完成。

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友