2016年10月17日 星期一

正規化學習筆記(1NF)

        今天開會的時候老闆宣布年底到明年要做一個新專案,專案規模預估不小,讓我這個進公司一年兩個月的也要參與初期架構規劃,從資料庫到所有的功能都會參與,預估會是個不小的挑戰。

        老實說有點挫,畢竟畢竟架構師沒有長年累積的實戰經驗根本就不能勝任,而在小公司裡面也不可能有太多的人力支援,於是系統分析、架構規劃、實作通通都只有兩個人負責,還好公司裡有另外一個資深的工程師可以問,挑戰接受!(謎:有拒絕的選項嗎?)

        離專案初期規劃正式開始還有兩三個禮拜的時間,接下來就用這段時間好好的補一下需要知道的知識吧!

        今天學到的一個觀念是:第一正規化

        在規劃欄位的時候,一定要賦予每一個table一個唯一的識別碼,透過這個識別碼一定能找到該行且唯一一行的值,table裡的識別碼等同於我們的身分證,都是唯一的,而現在用資料庫軟體新增table的話,基本上都會預設一個遞增的primary key,通常會取名為id,這樣就符合了第一正規化的其中一個條件:擁有唯一識別碼。

        再來介紹第二個條件:單一欄位不能同時放置多個值。

        假設小明在書店買了兩本書,書店在insert進資料庫的時候,不能只新增一行資料,然後把兩本書都放在同一個欄位裡面,像member="小明",book="現代PHP, Javascript大全",應該要優化成insert兩條資料,每筆資料都只放一本書進book裡面才對。

        錯誤示範:


        正確示範:


        最後,如果用多個欄位來表達同一件事情也是違反正規化的:

        錯誤示範:


        最後統整一下:


  1. 擁有唯一識別碼
  2. 一個欄位一次只放一個值
  3. 不用多個欄位來存放相同意義的值

參考資料:

沒有留言:

張貼留言