在MySQL中為保證數(shù)據(jù)庫存儲數(shù)據(jù)的性能,方便編程人員對數(shù)據(jù)的操作,勢必要有一些科學(xué)陵究、合理的設(shè)計數(shù)據(jù)庫結(jié)構(gòu)規(guī)則,這在關(guān)系型數(shù)據(jù)庫中稱它為范式奥帘。
每一列的屬性都是不可再分保證其原子性铜邮,屬性相近或類似的合并成一列,盡量減小數(shù)據(jù)的冗余寨蹋。
以下student表“地址”屬性包含了國家與城市信息松蒜,不滿足第一范式。
第二范式是指一行記錄只表述一件事已旧,有重復(fù)的數(shù)據(jù)應(yīng)把表拆開來秸苗。
student表經(jīng)第一范式調(diào)整后,“國家”运褪、“城市”屬性會有大量重復(fù)數(shù)據(jù)惊楼,造成數(shù)據(jù)冗余。要把student拆分成一張表述學(xué)生信息表和一張地址信息表秸讹,再用外鍵約束把它們關(guān)聯(lián)起來檀咙。
在滿足第一、二范式基礎(chǔ)上嗦枢,表內(nèi)每個屬性都是與主鍵是直接聯(lián)系而不是間接關(guān)系攀芯。
比如student增加一列“班主任”,那么“班主任“信息應(yīng)單獨建個表文虏,否則會導(dǎo)致很多麻煩。如”黃藥師“班主任是新入職的殖演,手上還沒有學(xué)生如放在student表是不合適的氧秘;”楊康“班主任走了,學(xué)生信息與班主任信息在同一張表時趴久,刪除楊康的同時把學(xué)生信息一并刪除是錯誤的丸相。
小結(jié)
范式是設(shè)計數(shù)據(jù)庫的基本概念,使用它可建立盡可能科學(xué)彼棍、合理的數(shù)據(jù)庫結(jié)構(gòu)灭忠。但在一些場合,出于特殊考慮犧牲結(jié)構(gòu)換取性能也是可以理解的座硕。不要一味的追求范式弛作,應(yīng)采用需求->性能->結(jié)構(gòu)的理念來設(shè)計數(shù)據(jù)庫。