標籤:
在學習mysql(1)中學到了一些基本的操作。
接下來一個比較重要的問題放在我面前,假設現在要實戰了,當然得建立資料庫咯,但是資料庫中一般會涉及到很多表,如果設計不當,邏輯上有些混亂,那麼這樣的資料庫當然不會好用。
在最開始學習這個東西,感覺就是excl嘛,沒有什麼了不起啊。弄一兩個表而已嘛。但是如果我們不管做什麼東西都用一個表可能會遇到問題。在learning mysql書中,講到了一個很好的例子來說明為什麼要用多個表:
假設一個學校需要記錄學校的每個學生的成績,那麼需要記錄該學生的名字,課程,成績。這時構建的表大概是:
但是有些時候學生的名字是一樣的,例如上面的表中,有兩個Susan Smith都參加了Computing Mathematics課程的考試,那麼哪一個成績對應哪一個學生呢?所以我們還需要向表中添加一個唯一標識的東西,例如學號,此時的表如下:
此時,我們還發現表中有一個同學參加了兩次Computing Mathematics課程考試,那麼這兩次課程是該生什麼時候考的呢?所以我們還需要添加學年,學期。這個時候表如下:
這個時候,這張表看上去沒有什麼問題了,能夠滿足記錄每個學生的成績,應該說可以滿意了。但是如果仔細看還會發現,怎麼學生的名字出現了很多次,這樣不是浪費了很逗儲存嗎?實際上只需要學號就行了啊。這時我們想到了將學生資訊和單獨儲存。這樣就會有兩個表:
表1 學生資訊:
表2 考試成績資訊:
這時看上去是不是就比較舒服了。
事實上通過以上的例子,我們還可以把課程單獨記錄一張表,而把考試的資訊又記錄一張表。這時我們就相當於是把學生看成一個實體,課程也看成一個實體,而考試成績則是兩個實體的關係,也就是著名的ER模型(實體關聯模型)。
以上講了這麼多都還沒有講到到底該如何設計一個資料庫。那麼該如何設計呢?其實從上面的例子中也能看到一些影子。例如剛開始需要弄清楚需要設計一個什麼資料庫,也就是要把需求搞清楚,上面的例子中從剛開始到後面添加學號資訊,添加學年學期資訊等;然後再是概念問題,什麼是實體什麼是關係;最後就是邏輯上的設計,也就是接近建立表了。
更詳細的學習筆記見 學習mysql(2)-如何設計資料(二)
學習mysql(2)-如何設計資料庫(一)