首页 新闻 会员 周边

问一个关于代码和sql访问性能的问题

0
悬赏园豆:10 [已关闭问题]

我做了两类数据库表,这两类数据库表都用来表示商家和商家图片的。

第一类

表1:shopId shopName shopPicSet(是piclocation的集合)

 

第二类

表1:shopId shopName

表2:shopId PicId Piclocation

这两类数据库设计哪个性能会更好?或者都在其他哪些方面有优势?

另外,如果采用第一类数据库的话,貌似需要用程序把每个piclocation分割开,这又会不会影响很多性能?

AnyKoro的主页 AnyKoro | 初学一级 | 园豆:92
提问于:2010-01-12 09:55
< >
分享
其他回答(3)
0

折衷的建议:

表1:shopId shopName,DefaultPic

表2:shopId PicId Piclocation,IsDefault

三点原则:
1、更新表2时同步更新表1

2、读取列表时,只取表1的信息

3、读取Detail时,再取表2信息。

邀月 | 园豆:25475 (高人七级) | 2010-01-12 10:03
但是第一类数据库也可以做到同步更新的。同时,一般加载的时候,是两个都要一起加载的,同时显示的。
支持(0) 反对(0) AnyKoro | 园豆:92 (初学一级) | 2010-01-12 11:22
0

不知道你表设计.不过也可以说下.

如果你的二个表都以shopId为主建,那么我建议你合成一个表.因为你这样用二个表完全没必要.

但是如果你的第二个表是以shopId PicId这二个为主建,那么我认为你要二个表.因为这样做成一个表明显不符合数据库的规范.但是如果你是故意设计的数据冗余,那么我也认为没必要.在好的设计面前.性能才能考虑.

天天不在 | 园豆:926 (小虾三级) | 2010-01-12 10:47
我是shopid picid做成主键的。但是你说的“故意设计的数据冗余”这个什么意思,不太明白了。我觉得主要是,两个表的话要查询两次数据库,一个表的虽然只有一次,但对于提取出来的ShopPicSet(piclocation的集合,里面每个piclocation以分号间隔),要进行分割,然后使用。
支持(0) 反对(0) AnyKoro | 园豆:92 (初学一级) | 2010-01-12 11:20
你说:我觉得主要是,两个表的话要查询两次数据库. 你的这句话就是我所说的故意设计的数据冗余(听说是大型数据库很高级的专业DBA的设计手法,不然只会产生脏数据).但是基本的的数据库都会满足三大范式.而你那样设计就不满足.(不满足就容易产生一些脏数据.数据更新,删除,增加都会产生冗余)你说的要查询二次数据库才能得到数据.这个本身就是正常的.在你用后台代码里每个表根据关建字取值,你就会发现这种设计本身就是提高工作速度的一种写法,相反你那看似一次就能查出数据来的写法会带来更多的问题.
支持(0) 反对(0) 天天不在 | 园豆:926 (小虾三级) | 2010-01-12 11:33
0

我认为这还是取决于你的实际需求。如果shopId PicId 是一对多的关系,那么就采用第二种,如果是一对一的关系那么就采用第一种

ForFreeDom | 园豆:589 (小虾三级) | 2010-01-12 13:21
0

如果两种设计都满足需求,第一种性能较高

river2009 | 园豆:210 (菜鸟二级) | 2010-01-12 20:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册