資料表中有出生年月 性別等字段,在資料表中新增身份證號字段是否違背資料庫設計正規化(1NF 3NF)?

時間 2021-10-19 22:58:39

1樓:飛鳥

正規化的意義在於「資料一致性」。如果某個字段存在於好幾個表,就有可能程式設計失誤甚至物理損壞,只更新了部分,從而造成資料不一致。或者,有些字段可以推出另外一些字段,但也是因為程式設計或者維護失誤,沒有完整同步更新,造成資料矛盾。

另外,計算機的早期年代,還有儲存空間問題。

但是實際環境下,冗餘欄位是很有意義的:

1)大幅提高效能。字段保持唯一,則意味著查詢要廣泛連線。很多時候很消耗資料庫資源,更不必說有些資料庫(比如MySQL)連線效能本來就不佳。

通過冗餘欄位則可減少連線。比如,訂單表裡不僅儲存訂單的goodsid,還儲存goodsname.這樣檢視訂單時就不用關聯商品表了。

在你的例子裡,雖然身份證可以推出性別和年齡,但實際設計時幾乎沒有人會靠這個推導。單獨的字段利於統計,更不必說身份證號也有錯或缺的時候。

2)保真。比如三年前的訂單,某個商品goodsid對應的商品名,今天看已經變了(甚至店鋪可能已經關了),要準確復原以往的訂單,只能靠儲存當時的場景,也就是說,根本不應該遵守正規化。

3)冗餘資料下,資料一致性,可以靠更新資料的統一呼叫來實現。也就是說,所有人都調統一的更新函式來更新資料,而更新函式則負責更新所有地方,保證資料的合理性。

總之,理論和實際,總是有很多距離的。正規化是嚴謹的,但並不能保證效能和適應資料變動,所以,幾乎沒有完全遵守正規化的設計。

2樓:langu

身份證號不建議分割,出生日期也建議保留,有些排序,篩選需要用到這兩個字段。如果你保留乙個身份證號,那麼每次都要substring,速度太慢了。

mysql某千萬級資料表中某字段有100多種取值,該欄位適合加索引嗎?

100 10000000 隨便乙個取值對應都平均有10W條對應的,效率不高,占用的空間太高.但是如果這個條件是每次查詢必須的話,還是需要加上,效率的話聊勝於無.如果這個條件是偶爾查詢會用到的話,那麼價效比就太低,不建議加.所以結論就是看你這個查詢條件用的多不多,有沒有佔80 的查詢以上.還有就是,分...

excel中如何快速將原始資料表中的重複資料項的相關資訊進行計算?

首先答案應該是這個吧 現在上公式 1.For column Price SUMPRODUCT A 2 A 12 A15 B 2 B 12 D 2 D 12 SUMPRODUCT A 2 A 12 A15 D 2 D 12 2.For column Price Unit VLOOKUP A15,A 1...

設計 MySQL 資料表的時候一般都有一列為自增 ID,這樣設計原因是什麼,有什麼好處?

孤狐無悔 回答如下 1 自增ID主要是作為主鍵。2 自增避免重複。3 不一定有優勢,但主要優勢是在滿足主鍵條件的情況下減少開發勞動。不只是MySQL,其他的關係型資料庫,例如MS SQL,Oracle,都有同樣的功能。自增ID列不一定要加,加了不一定有優勢,有時反而有劣勢。但是許多情況加上 並設定為...