資料庫主鍵不應該具有任何業務意義

來源:互聯網
上載者:User

        關聯式資料庫學的最重要的一個理論是:不要給關鍵字賦予任何業餘意義。假如關鍵字具有了業務意義,當使用者決定業務含義,也許他們想要為關鍵字增加幾位元字或者把數字改為字母,那麼就必須修改相關的關鍵字。一個表中的主關鍵字有可能被其他表做為外鍵。就算是一個簡單的改變,也可能會造成極大的維護上的開銷。
        為了使表的主鍵不具有任何業務意義,一種解決辦法是使用代理主鍵,例如為表定義一個不具有任何業務含義的ID欄位(也可以叫其他名字),專門做為表的主鍵。
        我回顧我以前設計的很多資料庫,都在某些地方沒有考慮周到,即使大部分的主鍵都沒有業務意義,還是會有某些表的主鍵和業務聯絡起來。因為我一直認為,主鍵是用來保持唯一性的,之所以要有代理主鍵,是因為有一些記錄的內容沒辦法保持唯一性。例如設計一個使用者表,使用者的名字有可能重複,這個人可能叫blue,那麼人也可能叫blue。這樣就需要一個ID來分清。
        由於我之前的想法,導致我資料庫設計上的一些錯誤。例如我曾經在一次資料庫設計中使用一個ID來做為一個表的主鍵,該表是記錄一些報表的。每個報表上都有一個ID,這個ID是具有業務意義的,是可以讓客戶輸入,也可以自動產生的,但是客戶說明這個ID是唯一的,是數字類型。因此由於它的唯一性,我在資料庫中設計這個ID為數字類型的。但是到了後來客戶要求使用文字類型的,例如原來的是“111111”,他要求可以寫成“11111A”,“11111B"。這個時候由於這個ID做了很多表的外鍵,就會產生很多維護上面的麻煩。即使在資料庫表之間做了串聯更新和串聯刪除,修改資料類型還是很麻煩的事情。
        這次RFID項目資料庫設計我原來想使用RFID標籤的ID做為產品的主鍵,因為RFID標籤ID具有唯一性,使用它作為主鍵在尋找的時候速度應該會快些。但是後來發現問題並不是這麼簡單。如果使用RFID標籤ID做為主鍵,那麼就具有了業務意義。當產品表和其他表關聯,產品表的主鍵做為其他表的外鍵的時候,如果出現一些業務上的情況,例如RFID標籤壞了,要更換,就會產生更改主鍵內容的問題了。
        回顧一下,還是發現自己的基礎不紮實。學習資料庫的時候都不去上課。少年不努力,老大徒悲傷。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.