求证数据库数据冗余问题!!

youli78 2008-11-28 10:47:25
我要做个有省市区3联动的注册功能
方案1、js,传省市区中文参数进用户表
方案2、建3个表(省市区),ajax读出,传ID进用户表
经理说用2好,用1会数据冗余,我不苟同,特向各位大大求证,请说清原因
...全文
222 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 youli78 的回复:]
那您觉得我应该使用哪种方法才是最佳呢?[/Quote]

例如一个人员信息,姓名并不能唯一代表一个人,所以我们常用一个单独的表来保存人员信息。但是对于“及其简单的值”,例如性别、年龄等公认的几百年固定不变的概念,我们当然直接使用值(而不是索引)。对于省市名称,例如全中国绝对不可能有重复的省市名称,修改你一个省市名称也是几十年难得一遇,所以可以做为一个“极其简单的值”。实际上,当某个省市名称真的被修改时,例如韩国的“汉城”改名“首尔”,这时候写一个自动化程序去对所有数据进行处理,先测试好这个程序再正式执行它一次,就可以了。


但是,就算是吧“年龄”这样的几乎不可能改变概念的值作为复杂的值(另外建立一个年龄表,而其它地方用到年龄时仅仅用它的id与之关联)也不一定是毫无道理的。


我虽然赞同你的说法,但是没有肯定你的经理的做法有问题,是因为我的回复并不是单纯说技术,而是说流程。你们到底是谁在做设计?这个问题不是什么大不了的,哪一种实现都可以,尽早实现则什么损失也不会有,而拖着不实现才是更大的损失。
youli78 2008-11-28
  • 打赏
  • 举报
回复
恩,经理是说建3张表,关联
3张表我也已经找到了,数据也有的
但是我感觉上JS的访问速度比AJAX来得快
所以很疑惑,为什么不使用速度快的
用AJAX数据库访问不是很频繁吗?
  • 打赏
  • 举报
回复
嗯,严格地说,我们可以找出许多反证。当随便读取数据时,都要进行inner join操作,而不是直接读出省市名称,这反而对这类常见操作极大地降低了效率,甚至可以说这种减少冗余的做法实际上增加了冗余。原因就在于这个字段是“极其简单”的字段。如果一开始在系统分析时就感觉这个字段比较复杂,一般的读取这个字段的操作都要去查询详细信息,那么分开是真正的减小冗余了。如果一开始分析时都是非常简单地读取这个信息,那么设计数据库时直接使用它的值就其实才是减少冗余的。

不过,这是技术上很认真的说法。对于很简单的东西的开发,特别是一个系统刚刚开始起步的时候,有时候冗余点就冗余点吧。
qinhl99 2008-11-28
  • 打赏
  • 举报
回复
严格的说,谈不上有多少冗余吧,方案1不需要再join地域表,这样也没有不要,但方案2大家采用的更多些!
各有各的好处,你们经理没有告诉你在方案2种没有必要建三张表吗?哈哈
  • 打赏
  • 举报
回复
我们反过来说,对于“将简单的事情复杂化”你可能也没有必要每一个都给他纠正过来,对于对产品的价值影响不是很明确地分歧可以先按照其中一种方法实现,以后再想出聪明可靠的办法进行改造(或者一直使用下去)。
  • 打赏
  • 举报
回复
基本上,要讨论的是“信息是否足够简单”。通常没有绝对的,例如你在字段中有一个int类型用来保存“年龄”,如果有人说“年龄应该用一个复杂记录来表示而不应该用一个int来表示”,那么你请他解释清楚就可以了。

当你在字段中定义了一个字符串来表达省市名称时,如果需要对某个省市名称做扩展,那么扩展的新的table也可以用省市名称作为主键来关联到当前这个表,而不一定要单独建立一个省市名称表然后再当前这个表用它的id号码关联。对于上面的年龄设计也是如此。

其实对初步设计时已经确认极其简单的字段,应该直接使用原始的值用于数据库字段。

但是我要说的是,初学者会比较自然而然地使用想当然的做法去设计。然后学了一些东西并且背得挺多挺深的人会喜欢一开始就把事情搞复杂,他们坚持认为只有搞复杂了才能提高效率。等学的东西更多更实用了,会反而又看上去回复到初学者的那种自然而然的设计了,但是此时其实他能够把复杂多变的项目非常顺利地进行到底中间不纠缠。所以我对那些喜欢把事情搞复杂的人并不在情绪上去排斥。
怫悰 2008-11-28
  • 打赏
  • 举报
回复
冒泡帮顶接分
MicroDeviser 2008-11-28
  • 打赏
  • 举报
回复
经理说怎么做就怎么做啊
vrhero 2008-11-28
  • 打赏
  • 举报
回复
一般来说只有需要经常维护的数据才需要建立数据表,像行政区划这种数据每年的变动都很小,而且到市这一级更是几年几十年才有变化...如果考虑效率可以用枚举...

就算一定要用数据库像这种数据也没有建三个表的必要,假如以后要加上县区你是不是要建第四个表?
一品梅 2008-11-28
  • 打赏
  • 举报
回复
省市表是固定数据,没必要用数据库存储.
youli78 2008-11-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sp1234 的回复:]
嗯,严格地说,我们可以找出许多反证。当随便读取数据时,都要进行inner join操作,而不是直接读出省市名称,这反而对这类常见操作极大地降低了效率,甚至可以说这种减少冗余的做法实际上增加了冗余。原因就在于这个字段是“极其简单”的字段。如果一开始在系统分析时就感觉这个字段比较复杂,一般的读取这个字段的操作都要去查询详细信息,那么分开是真正的减小冗余了。如果一开始分析时都是非常简单地读取这个信息,那么设计数…
[/Quote]
那您觉得我应该使用哪种方法才是最佳呢?

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧