论坛首页 编程语言技术论坛

不按rails方式出招之痛 - db schema design

浏览 14316 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-07-16   最后修改:2009-06-04
rails的‘约定胜于配置’,本来是个进步,可是到了某些情况下,反而成了累赘。

我参与到一个大型的分布式项目中,这个项目用到c++,java,ruby等语言开发. 后台管理部分用java实现,web层用ROR实现.于是web层数据库表自然按照rails的理念来设计.

两个月的开发过程,经历了数次需求变动,最后网站终于成型.可是最后要实现网站数据库和中心数据库数据同步时出现了问题.

中心数据库设计者并不懂rails,表自然没有按rails那套思想来设计.不用自增主键,不关联外键,频繁使用联合主键,没有多态设计...,考虑了大量数据安全性的问题,而且按他们的说法,这很套设计考虑了很多因素,很合理,我按照rails的思想设计的表被指为异端.

两套数据库差别很大,一番会议之后,强烈要求web层表设计和中心数据库的表一致.

于是,我痛苦了,表全改,rails的优势被埋没很多,大量代码要重写.

项目经理说我不听话,我心里话,这套表设计当初可是开会讨论通过了的.

项目经理说用Java做,我心说,项目快要上线了,java重写还来得及?再说,我也不愿再用ssh那套东西来做网站了.

自己造的蘖,只好自己来承受了.

补充一下:

技术分布: c++及相关框架开发嵌入式设备以及若干个服务器上的应用程序,java做后台管理核心及数据同步的工作,ruby来开发web server上的应用程序.

后来的一些体会:

这个项目搞得很复杂,去年下半年就开始酝酿,然后招兵买马,再到现在也只是前期开发,最多出个1.0版本,能完整跑起来就不错了.

网站部分功能并不多,更多的时像个候桥梁,起到联结作用.

用Rails是没有错的,只是表设计没有尽Rails所能.

如果开始就整合,持续集成,迭代开发.可以避免这种问题,不过公司事太多,负责人太忙了,什么都考虑得很周全不太现实.

或者同步的时候遵循以前的原则,用接口的方式,也能避免这种问题.不过这样同步的工作量不小,现在改表,我是麻烦了,可是同步的工作量小了很多,从整体来说还是省了.

我也就没什么好抱怨的,毕竟项目中总是充满了变化.顺应变化,这也是ROR敏捷性的一点体现
   发表时间:2008-07-16  
这个问题是人的问题,不要往rails表设计上扯。
0 请登录后投票
   发表时间:2008-07-16  
你们项目经理明显在推卸责任
shaka 写道

这个项目用到c++,java,ruby等语言开发

这个选型的时候怎么定的?
0 请登录后投票
   发表时间:2008-07-17  
rails不是万能药,一开始你就选型错了。你的web不是独立应用,而是需要和异构系统整合的,如果后端的系统不是以SOA设计,而是你的web要直接访问它的数据库,用rails会很辛苦。

实在要用rails的话,可以考虑用java做一个中间层,以REST方式来整合你的web和后端系统
0 请登录后投票
   发表时间:2008-07-17  
n个系统整合的在一个库里,用rails的必须取得建模权。不然就各干各的,然后再搞数据库同步。
0 请登录后投票
   发表时间:2008-07-18  
后台管理部分用java实现 -中心数据库
web层用ROR实现 - 网站数据库
Strange decision.
more like collaboration and design issue on DB schema, instead of rails.
rails is more difficult to work on that situation, even no way unless hacking rails' (ActiveRecord) source code.  but it can be easy than java, I think.
did you look for plugins like compositekeys:
http://compositekeys.rubyforge.org/

may you be lucky, dude
0 请登录后投票
   发表时间:2008-07-18  
拜托,这是你们自个团队内部的沟通问题
0 请登录后投票
   发表时间:2008-07-19  
冉翔 写道
拜托,这是你们自个团队内部的沟通问题

这是个缺乏持续集成的问题
用不同的技术做的几个部分集成在一起麻烦吗?
麻烦
所以你应该尽早尽可能频繁地做这件事
从项目启动的第一周就开始把所有部分集成在一起
每天集成8~10次
这就是答案
0 请登录后投票
   发表时间:2008-07-19  
liusong1111 写道
后台管理部分用java实现 -中心数据库
web层用ROR实现 - 网站数据库
Strange decision.
more like collaboration and design issue on DB schema, instead of rails.
rails is more difficult to work on that situation, even no way unless hacking rails' (ActiveRecord) source code.  but it can be easy than java, I think.
did you look for plugins like compositekeys:
http://compositekeys.rubyforge.org/

may you be lucky, dude


thank you!liusong. I'm trying the composite_primary_key gem, It seems no other ways! It maybe a little funny that both the department manager and the PM do not know rails well yet adapt it without carefully consideration. They both thought that my database design is ugly, maybe.
0 请登录后投票
   发表时间:2008-07-19  
gigix 写道
冉翔 写道
拜托,这是你们自个团队内部的沟通问题

这是个缺乏持续集成的问题
用不同的技术做的几个部分集成在一起麻烦吗?
麻烦
所以你应该尽早尽可能频繁地做这件事
从项目启动的第一周就开始把所有部分集成在一起
每天集成8~10次
这就是答案


恰恰相反,没有持续集成的概念。还是传统思想,而且一开始就没有考虑的很全面。
本来同步的部分应该是由项目组的一个成员用ruby来写。结果临时决定改用现有的一套java组件直接操作数据库。为了方便他操作,我只好改表了。
这是否可以看作架构的一种耦合呢,我觉得,不同系统之间应该互不影响才是.
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics