3 回答

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
術(shù)語(yǔ)“重復(fù)組”最初是指基于CODASYL和COBOL的語(yǔ)言中的概念,其中單個(gè)字段可能包含重復(fù)值數(shù)組。當(dāng)EFCodd描述他的第一范式時(shí),這就是他所說(shuō)的重復(fù)小組的意思。這個(gè)概念在任何現(xiàn)代的關(guān)系型或基于SQL的DBMS中都不存在。
數(shù)據(jù)庫(kù)設(shè)計(jì)人員也非正式地和不精確地使用了“重復(fù)組”一詞來(lái)表示一組重復(fù)的列,這意味著表中包含相似類型值的列的集合。這與1NF的原始含義不同。例如,在名為Families的表中,其列名為Parent1,Parent2,Child1,Child2,Child3,...等,有時(shí)將Child N列的集合稱為重復(fù)組,并假定違反了1NF,甚至盡管從Codd的意圖來(lái)說(shuō),它不是重復(fù)的小組。
如果每個(gè)屬性都是單值的,則后一種所謂的重復(fù)組的含義在技術(shù)上并不違反1NF。屬性本身不包含重復(fù)值,因此不會(huì)因此而違反1NF。但是,這種設(shè)計(jì)通常被認(rèn)為是反模式,因?yàn)樗鼘⒈硐拗茷轭A(yù)定的固定數(shù)量的值(一個(gè)家庭中最多有N個(gè)子級(jí)),并且因?yàn)樗鼜?qiáng)制對(duì)每個(gè)列重復(fù)進(jìn)行查詢和其他業(yè)務(wù)邏輯。換句話說(shuō),它違反了設(shè)計(jì)的“ DRY ”原則。因?yàn)樗ǔ1徽J(rèn)為是糟糕的設(shè)計(jì),所以它適合數(shù)據(jù)庫(kù)設(shè)計(jì)人員,有時(shí)甚至適合老師將這種重復(fù)的列稱為“重復(fù)組”,并且違反了“第一范式”的精神。
術(shù)語(yǔ)的這種非正式用法有點(diǎn)不幸,因?yàn)樗赡苡悬c(diǎn)武斷和混亂(何時(shí)一組列實(shí)際上構(gòu)成重復(fù)?),還因?yàn)樗稚⒘烁镜膯?wèn)題,即Null問(wèn)題。所有范式都與不允許存在null的關(guān)系有關(guān)。如果表允許任何列為空,則它不滿足滿足1NF的關(guān)系模式的要求。對(duì)于我們的家庭表,如果“子級(jí)”列允許為空(代表少于N個(gè)孩子的家庭),則“家庭”表不滿足1NF。在規(guī)范化練習(xí)中,通常會(huì)忘記或忽略空值的可能性,但是避免不必要的可空列是避免重復(fù)使用列集的一個(gè)很好的理由,
添加回答
舉報(bào)