荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: tang (独孤九剑〖玄铁重剑〗), 信区: Visual
标  题: Re: 好冷清啊!
发信站: BBS 荔园晨风站 (Mon Mar 27 22:35:31 2000), 转信

【 在 Jobs (温少) 的大作中提到: 】
: 经常设计数据库的时候,通常为不同的实体建立不同的表。
: 例如,我们的bbs上信息是用数据库管理的。所有斑竹的信息包含在一个表BMADMs中,
: BMADMs包含的字段有:id、name等。
: 所有的文章的标题用一个表来管理,而文章的内容也用一个表管理。
: 所有的文章标题做一个表titles,
: 这个表包含文章的标识ID和文章的标题title和作者id。而另一个表contents包含
: 文章的标识ID和具体文章内容content。
: 如果我要查询所有斑竹所发表过的所有文章的标题,就要使用outer join。如:
: select name,title
:    from BMADMs as a left join as b
语法错了吧?                   ^^ titles as b (我手上没手册,你查一下)

:    on ( a.id = b.id)

这样选出来的结果集需要客户端在对结果集对某些字段进行判断是否为NULL!
也可以用服务器方:SQL Server用CASE,Oracle用if……
(有时这个任务就交给人干了,让用户看到许多空白)
: 我觉得使用outer join是一种技巧,而不是数据库设计失误的救命草。在OLAP系统中
哈哈!我没有说是救命草,我是说不要当它是救命草!(查查前面的文章就知道了)
我也觉得外连接挺有用的!但我在实际项目中看到了一些错误的使用,导致当库里
的数据增长后,使许多经由外连接得出的结果集跟实际所需的结果集差距很大!

如你上面的例子,如果BMADMS中有ID同为两个版的斑竹,出于某种考虑(为了某部分编码
的方便),该表中存在了两条该ID的记录,那样如果在Titles中该斑竹又有两条记录,那
样笛卡儿乘积的结果集就有4条记录跟该ID相关,其实应该只有两条才对!
其实这样的设计错误,在不用外连接时是容易发现的,但用了外连接后往往会使人糊涂!
: 使用outer join是大量的,当然我还没有OLAP方面的经验,我所谈的只能是理论上的。
: 经常对数据库进行规范化后,即让它符合1NF(The First Normal Form)或2NF
: (The Second Normal)或3NF......或更高。当数据库越规范化的时候,数据库的表
: 就会越多,数据库就会越复杂,通常一般的开发人员不能很好掌握这些复杂的查询关
: 系,这时候,就可以使用View来隐藏数据库的复杂性,而建立视图的时候,通常大量
: 使用inner join和outer join甚至cross join。........
:    这是我的一些看法,欢迎师兄指教!
: 【 在 tang (独孤九剑〖玄铁重剑〗) 的大作中提到: 】
: : 你举个例子吧!这样讨论起来才不会空洞!(这几天在BBS上有点懒,只好让你先说了



--
海到天边天作岸
山登绝顶我为峰

※ 修改:·Jobs 於 Mar 28 18:49:00 修改本文·[FROM: 192.168.11.111]
※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.63.246]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店