JBTALKS.CC

标题: database normalization [打印本页]

作者: hata1997    时间: 2010-6-9 10:09 PM
标题: database normalization
本人想了解,normalization 中的:
1) composite key, candidate key, foreign key是怎麼產生的?
2) 1NF, 2NF, 3NF


我在線上,看過相關資料,可是還是捉不到它的concept.....
作者: pohlee    时间: 2010-6-9 10:23 PM
看这个应该了解了吧?


作者: hata1997    时间: 2010-6-10 10:29 PM
看这个应该了解了吧?
pohlee 发表于 2010-6-9 10:23 PM

對不起,有點看不明白。
1) 如我們以1NF, 2NF, 3NF來呈現,應該怎麼寫出來?
2) CD table 的ASIN是什麼?
作者: pohlee    时间: 2010-6-10 11:07 PM
1)1NF, 2NF, 3NF
http://en.wikipedia.org/wiki/First_normal_form
http://en.wikipedia.org/wiki/Second_normal_form
http://en.wikipedia.org/wiki/Third_normal_form

2)CD table 的 ASIN 就像书的 isbn 。。。
作者: hata1997    时间: 2010-6-11 12:33 AM
1)1NF, 2NF, 3NF
2)CD table 的 ASIN 就像书的 isbn 。。。
pohlee 发表于 2010-6-10 11:07 PM


1) 其實您所提供的links,我昨晚自己有找到也有看過,但可惜還是看不懂。
2) 若以您的圖來說,那一個部份屬於1NF, 那一部份屬於2NF.....3NF?
3) 什麼樣的key,會出現1NF...2NF...3NF....?
4) 了解normalization最笨的方法是?
作者: pohlee    时间: 2010-6-11 12:00 PM
本帖最后由 pohlee 于 2010-6-11 11:06 PM 编辑

还没分割的db (全部在一个table)


1NF 把基本的relation分割出来
在这里是哪里一个员工负责哪里一个project...


2NF 把重复的分离出来
在这里是员工id,名,部门,部门id 一直重复。。。所以开多一个table


3NF 把没关系到的data分离出来 (也可以是重复的数据)
在这里是department id /name。。。


Normalisation 可以说是简易化。。。把重复的东西分离出来。。。


了解normalization最笨的方法是?
死背

了解normalization最好的方法是?
多做练习

其实这个问题应该去“电脑语言编程讨论区”哪里问。。。
或找Super-Tomato , goodday<<<天才
作者: hata1997    时间: 2010-6-11 09:54 PM
本帖最后由 hata1997 于 2010-6-11 09:59 PM 编辑
还没分割的db (全部在一个table)
1NF 把基本的relation分割出来
在这里是哪里一个员工负责哪里一个p ...
pohlee 发表于 2010-6-11 12:00 PM

死背???唔…

那就是說我可以把同樣的問題,搬過去那裡問?是這樣嗎?
我對JB talk認識還新。
作者: goodday    时间: 2010-6-12 08:09 PM
pohlee  的解释很清楚了
他剩下的是 他自己要下手弄个咯

pohlee 讲的第一个
还没分割的db (全部在一个table)

你想下如果你有100万的 record 拉

那你重复的 就很严重的问题咯

after 第一或第二 正规化了
资料库会比较小和比较有效率

你想下  越大的资料库 要的维护的成本就比较高
作者: hata1997    时间: 2010-6-12 11:26 PM
pohlee  的解释很清楚了
他剩下的是 他自己要下手弄个咯
pohlee 讲的第一个
还没分割的db (全部在一个 ...
goodday 发表于 2010-6-12 08:09 PM

謝謝提醒。
但就3NF成果而言,其table relationships該怎辨識?
作者: Super-Tomato    时间: 2010-6-13 12:37 AM
本帖最后由 Super-Tomato 于 2010-6-13 12:39 AM 编辑
謝謝提醒。
但就3NF成果而言,其table relationships該怎辨識?
hata1997 发表于 2010-6-12 11:26 PM



該怎么去設計資料庫是靠自己了解之後多練習就可以掌握的,簡單的例子如下 :
你看看這資料表直接有哪些關系,如果你都做在一個資料表的情況下會是如何,两者之間的差别和好壞是否可以看的出來



Users
userIDNameAge
1James20
2Tom18


Bag
userIDbookID
1A001
1A002
2A001


Author
bookIDbookNamebookAuthor
A001Thinking in Java (4th Edition)Bruce Eckel
A002Java Black BookSteve Holzner, Steven Holzner

作者: goodday    时间: 2010-6-13 06:55 PM
select * from Users join Bag on  Users.UserID = Bag.UserID

番茄 是 inner join 还是 left join 比较好??
作者: AhPang    时间: 2010-6-13 10:46 PM
select * from Users join Bag on  Users.UserID = Bag.UserID

番茄 是 inner join 还是 left join 比较 ...
goodday 发表于 2010-6-13 06:55 PM


应该是要看user的要求吧。
1)inner join只能看到有带书的user
2)left outer join是看完所有的user不管是有或没带书的。

前面的example都是一样的result,全部user都有带书。
作者: hata1997    时间: 2010-6-13 11:26 PM
本帖最后由 hata1997 于 2010-6-14 08:46 PM 编辑
应该是要看user的要求吧。
1)inner join只能看到有带书的user
2)left outer join是看完所有的user不 ...
AhPang 发表于 2010-6-13 10:46 PM

嘩…兩位講的事情,我一點也看不懂…真慚愧。
可以解說一下嗎?
作者: hata1997    时间: 2010-6-13 11:29 PM
該怎么去設計資料庫是靠自己了解之後多練習就可以掌握的,簡單的例子如下 :
你看看這資料表直接有 ...
Super-Tomato 发表于 2010-6-13 12:37 AM

您真的很厲害…哈…
我昨天還想法子,去找您:
想不到,您現在就現身了…

唔…我會靜下心來,再研究下。
因之前看不懂,再逼自己看…結果只是把blur x infinity.....
作者: Super-Tomato    时间: 2010-6-14 04:33 AM
select * from Users join Bag on  Users.UserID = Bag.UserID

番茄 是 inner join 还是 left join 比较 ...
goodday 发表于 2010-6-13 06:55 PM



我也認為最终要看使用者要求,以我所提供的例子的話两者皆可得到同樣答案,
inner join 不會顯示没匹配的数据,如果其中一位 User 没有任何一本书,那麼該 User 就不被列出,而 left join 則是根据左方資料为主
作者: goodday    时间: 2010-6-15 11:52 AM
哈哈 好日子 在此受教
ah pang 你不错啊
作者: goodday    时间: 2010-6-15 12:11 PM


问题就是 我通常不要重复的
作者: AhPang    时间: 2010-6-15 08:28 PM
问题就是 我通常不要重复的
goodday 发表于 2010-6-15 12:11 PM


这个好像用错了哦,你是不是用full outer join?
用一般的inner join就不会重复了。

select * from Employee a
inner join Order b on a.EmployeeID = b.EmployeeID

好日子大哥,应该在给我们出问题吧?
作者: AhPang    时间: 2010-6-15 08:30 PM
哈哈 好日子 在此受教
ah pang 你不错啊
goodday 发表于 2010-6-15 11:52 AM


都是看你给的e-book link学的。还有好多要和你学,希望你常来教学。




欢迎光临 JBTALKS.CC (https://jbtalks.my/) Powered by Discuz! X2.5