关系数据库,别来烦我 (使用数据库开发的一点思考)

做这个工作近3年了除了睡眠不足,另一个令我烦恼的就是每天在打交道的关系数据库。确切的说,这根本不是我想要的数据存储的解决方案。

看一下同行发来的数据库结构吓一跳不大的一个项目近100张表关系就是密密麻麻的连线打印出来更是颇为壮观。

他们非常认真地按照书上说的1NF 2NF 3NF 来做这些表似乎是一张都省不了。真要使用起来这些数据就更困难了select join join join where and where and where group by....

insert table A and then update table B and then update table C....

受不了了。

有没有想过按照范式来设计的数据库其优点是什么呢

我想主要的优点应该在于很容易很灵活地对数据库里的数据作出各式各样的统计排序

但是我的系统通常只是需要存储数据读出数据。统计排序并不是一个常用的功能。

说一下我想要的数据库结构吧

比起操作二维表我更喜欢操作文件目录这是人类能够直观理解的数据存储形式我想在程序里边使用这样的命令:

ls mk md cp mv ln ....

举例来说我做的购物车系统。做出文件目录形式是这样的。绿色是目录,红色是数据体。

├---1:[Category]

│  ├---1:[Bag]

│  │  ├(1)Dinor Gdshoes.product.lnk

│  │  ├(2)Nice PoPo.product.lnk

│  ├---2:[Shoes]

│  │  ├(1)Nina Shoes.product.lnk

├---2:[Customer]

│  ├---1:[dino@yahoo.de]

│  │  ├---1:[Cart]

│  │  │  ├(1)Dinor Gdshoes.product

│  │  │  ├(2)Nice PoPo.product

│  │  ├(1)infomation

│  │  ├---2:[Order]

│  │  │  ├---1:[OSD-2007-09-11]

│  │  │  ├---2:[OSD-2007-09-13]

│  │  │  │  ├(1)infomation

│  │  │  │  ├---1:[Item]

│  │  │  │  │  ├(1)Nice PoPo.product

├---3:[Feedback]

│  ├(1)2008-07-19 0922.feedback

├---4:[Image]

├(1)infomation

├---5:[Inventroy]

│  ├(1)1451.Dinor Gdshoes

│  ├(2)7612.Nice PoPo

│  ├(3)7631.Nina Shoes

├---6:[Item]

│  ├(1)1451.Dinor Gdshoes

│  ├(2)7612.Nice PoPo

│  ├(3)7631.Nina Shoes

├---7:[Order]

需要新增用户只需要在Customer目录下新增一个以客户email命名的目录。每个Customer目录下都有一个Cart目录和一个Order目录。客户购物的时候程序里边就是两个命令 cd /Customer/dino@yahoo.de

cp Item/1451.Dinor ./Cart

当客户付款后生产订单时只要

mv Cart/* Order/OSD-2009-02-24/

...

这样多美妙。

 

另外,我还不打算把放弃数据库存储而用文件系统存储这些。用普通的文件系统它创造出来的问题估计是比解决的问题更多。

我想应该搞一个项目专门用来定义 ls mk md cp mv ln 这样的命令接口。

资源管理器接上项目就能像是浏览目录一样。

当然我智力有限项目的目录设计器一定是要有图形界面的操作项目的编译器还要对可能的出错提醒。

至于最终存储数据的位置可以映射在简单的二维表数据库文件系统,memcache,amazon的云等等考虑效率混合使用。

......

posted on 2009-02-24 13:26  onelove  阅读(577)  评论(4)    收藏  举报