1969年8月8日,在北京協(xié)和醫(yī)院降生了一個(gè)漂亮的小女孩。接生的阿姨說(shuō),她的聲音這么大,好象想要全世界的人都聽(tīng)到。
后來(lái),她的父親為她取了一個(gè)很好聽(tīng)的名字,叫“王菲”。于是,所有的小朋友就叫她“王菲”,“王菲”就是她童年的主鍵。
在她上初二的時(shí)候,認(rèn)識(shí)了二班另一個(gè)叫“王菲”的同學(xué),而且和她同一天生日。不過(guò),同學(xué)們常常將她倆弄錯(cuò),后來(lái),就分別叫她們“大王菲”和“小王菲”!按笸醴啤本褪撬谕瑢W(xué)們心目中的主鍵。
在大王菲18歲的那一年,她領(lǐng)到了她的身份證。從此,她有了新的身份標(biāo)識(shí)“100321690808022”,這一標(biāo)識(shí)可以唯一區(qū)別中國(guó)大陸的每一個(gè)人。同時(shí),原來(lái)二班的“小王菲”也領(lǐng)到了她自己的身份證,“100321690808006”。于是,人們就可以用身份證號(hào),唯一標(biāo)識(shí)兩個(gè)“王菲”了。身份證號(hào)就是她成年后的主鍵。
由于她的歌唱的非常好,沒(méi)多久就成了歌星。后來(lái)她去了香港發(fā)展,娛樂(lè)公司非要將她的名字更改為“王靖雯”,雖然她并不喜歡這個(gè)名字,但為了事業(yè)的發(fā)展還是同意了!巴蹙个本统闪怂趭蕵(lè)圈里的主鍵。
“王靖雯”的歌打動(dòng)了許許多多的歌迷,很快就成了歌壇天后。歌迷們將“王靖雯”這一主鍵與無(wú)數(shù)條動(dòng)聽(tīng)的歌曲記錄關(guān)聯(lián)在了一起,并形成了一個(gè)龐大的歌迷數(shù)據(jù)庫(kù)。
沒(méi)多久,王靖雯和一個(gè)彈電吉他的小子相愛(ài)了。那小子說(shuō),還是“王菲”這個(gè)名字好聽(tīng),于是,“王靖雯”又變回“王菲”了。主鍵被那小子修改了,這下麻煩大了。歌迷們都糊涂了,是將她的歌關(guān)聯(lián)到“王菲”還是“王靖雯”呢?這一主鍵的修改,導(dǎo)致歌迷數(shù)據(jù)庫(kù)的一次大混亂。
再后來(lái)呢,她和那個(gè)彈電吉他的小子結(jié)婚了,香港政府將他們的身份證號(hào)碼,用結(jié)婚證書關(guān)聯(lián)起來(lái)。這本也算一樁好事,可是,月老在酒醒之后發(fā)現(xiàn)了這一錯(cuò)誤,就將關(guān)聯(lián)的記錄刪除了。陰差陽(yáng)錯(cuò),命運(yùn)使然,她和那個(gè)彈電吉他的小子只好分手了。
但是,正如接生的阿姨說(shuō)的那樣,她的聲音的確讓全世界的人都聽(tīng)到了!
講完這個(gè)故事之后,我們是否能領(lǐng)悟到數(shù)據(jù)庫(kù)設(shè)計(jì)的一些哲理呢?
什么是主鍵?
關(guān)系數(shù)據(jù)庫(kù)說(shuō),為了唯一區(qū)分表的每一行記錄,必須為表確定一個(gè)主鍵。主鍵可以是一個(gè)或多個(gè)列組成,這些主鍵列的值不能重復(fù)。主鍵是兩個(gè)表進(jìn)行關(guān)聯(lián)的基礎(chǔ),所謂“關(guān)系”體現(xiàn)的是一個(gè)表的字段與另一個(gè)表的主鍵的關(guān)聯(lián)。
在日常的應(yīng)用項(xiàng)目開(kāi)發(fā)中,我們常常都會(huì)面臨“該拿什么字段來(lái)做主鍵”的難題。
用名字做主鍵?一班的“王菲”和二班的“王菲”可能重復(fù)。
用身份證號(hào)做主鍵?在大陸也許不會(huì)重復(fù),去香港后,人家卻不認(rèn)。本不相信第二代身份證號(hào)會(huì)重復(fù),但俺的一位同事正好撞上!
同樣,主鍵值的更新也是麻煩事兒。“王靖雯”變成“王菲”那段日子,貨架上一張唱片是王靖雯的,另一張又是王菲的,許多歌迷還以為又有新人出現(xiàn)了。
請(qǐng)不要說(shuō)可以級(jí)聯(lián)更新,將你那個(gè)做主鍵的字段加長(zhǎng)兩位試試?想當(dāng)年,當(dāng)身份證號(hào)從15位增加到18位時(shí),給銀行、證券、政府、企業(yè)...等多條戰(zhàn)線上的兄弟們制造了怎樣的痛苦啊!
為什么會(huì)出現(xiàn)這些問(wèn)題呢?
原因就是:錯(cuò)誤地把對(duì)象屬性當(dāng)作對(duì)象標(biāo)識(shí)!
對(duì)象屬性和對(duì)象標(biāo)識(shí)都是對(duì)象數(shù)據(jù)庫(kù)中的概念。
什么是對(duì)象屬性呢?
就是業(yè)務(wù)邏輯上涉及的任何可變信息,什么“姓名”、“性別”、“身份證號(hào)”、“訂單號(hào)”...通通都是對(duì)象屬性。對(duì)象屬性總會(huì)變化的,只是有些變得快,有些變得慢而已。
對(duì)象標(biāo)識(shí)是啥?就是唯一區(qū)分?jǐn)?shù)據(jù)對(duì)象的鑒別符,對(duì)象標(biāo)識(shí)存在的唯一目的就是區(qū)分對(duì)象,除此之外沒(méi)有任何業(yè)務(wù)邏輯上的意義。
不管王菲的屬性值怎樣變化,但王菲還是王菲,不是二班的那個(gè)“王菲”。也就是說(shuō),王菲的靈魂未變,她是不會(huì)改變的,就象哲學(xué)上所說(shuō)的“不以人的意志為轉(zhuǎn)移”。這種唯一表示對(duì)象本身的東西,就是對(duì)象標(biāo)識(shí)!
對(duì)象標(biāo)識(shí)是唯一的。也就是說(shuō),即使兩個(gè)對(duì)象,他們的屬性完全一樣,但它們的對(duì)象標(biāo)識(shí)是不同的。畢竟,同名同姓甚至同一天出生的大王菲和小王菲是兩個(gè)不同的人。
對(duì)象的標(biāo)識(shí)是永恒不變的。一旦對(duì)象產(chǎn)生,它的標(biāo)識(shí)就自然地、唯一地產(chǎn)生了。盡管王菲換了名,身份證號(hào)也變過(guò),但王菲的對(duì)象標(biāo)識(shí)未變。即使到了下個(gè)世紀(jì),她的對(duì)象標(biāo)識(shí)也將依然存在于歌迷們的們的心中。
對(duì)象的標(biāo)識(shí)是描述關(guān)系的基礎(chǔ)。王菲唱的歌是王菲唱的,不是初二二班的那個(gè)“王菲”唱的。王靖雯唱的歌就是王菲唱的歌,有的歌迷只將歌曲和歌手的人名關(guān)聯(lián)起來(lái),難怪會(huì)出混亂。香港政府也犯相同的錯(cuò)誤,將王菲的身份證號(hào)碼這一內(nèi)部屬性,跟那個(gè)彈電吉他的小子關(guān)聯(lián)起來(lái),也許就是命運(yùn)的錯(cuò)誤。
出處:軟件真諦
責(zé)任編輯:bluehearts
上一頁(yè) 下一頁(yè) 主鍵的故事 [2]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|