曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專營(yíng)店坑蒙拐騙欺詐消費(fèi)者
• 如果元素節(jié)點(diǎn)是一個(gè)子節(jié)點(diǎn),創(chuàng)建一個(gè)與父元素節(jié)點(diǎn)同名的列,但是使用前綴f k _。
• 創(chuàng)建一個(gè)在剛創(chuàng)建的列和與其父元素節(jié)點(diǎn)同名的表中的列的外鍵關(guān)系,列的名字是父元素
的名字加一個(gè)前綴p k _。
• 如果元素節(jié)點(diǎn)的內(nèi)容只是本文,那么創(chuàng)建一個(gè)名字為p c d a t a的列。
一個(gè)元素的多發(fā)性是在< R e c S u b j C a t e g o r i e s >里定義的:
程序清單1 0 - 4 6
< R e c S u b j C a t e g o r i e s >元素本身容易模擬;只要?jiǎng)?chuàng)建一個(gè)新表。可能有一些冗余—因?yàn)樵?br />
第10章XML和數(shù)據(jù)庫(kù)使用401 下載
這種情況下一個(gè)< C a t e g o r y >可能只關(guān)聯(lián)了一個(gè)< B o o k >—但是我們不得不保留看上去冗余的表,
以便在需要時(shí)重建正確的X M L結(jié)構(gòu)(在后面將進(jìn)一步討論)。
比較難于模擬的部分是< C a t e g o r y >元素出現(xiàn)了三次。這意味著我們不能使用通常的規(guī)則,因
為既不能創(chuàng)建三個(gè)名為C a t e g o r y 的表— 如果C a t e g o r y 元素不只是文本— 也不能在
R e c S u b j C a t e g o r i e s表中創(chuàng)建三個(gè)名叫C a t e g o r y的表—因?yàn)?lt; C a t e g o r y >只是文本。
我們有一個(gè)規(guī)則說(shuō)明,如果一個(gè)元素發(fā)生一次以上,它必需放在自己的表中,所以我們將
創(chuàng)建一個(gè)名為C a t e g o r y的表。然而,我們會(huì)看到當(dāng)開(kāi)始寫元素處理代碼時(shí),需要:
• 在當(dāng)前的分層中計(jì)算元素的處理會(huì)發(fā)生的次數(shù)。
• 不要在一個(gè)元素再次發(fā)生時(shí)創(chuàng)建一個(gè)新表。
如果按照下面的定義,結(jié)果表將沒(méi)有什么不同:
程序清單1 0 - 4 7
實(shí)際上一個(gè)觸發(fā)器只能觸發(fā)3次。
注意這個(gè)規(guī)則假設(shè)后續(xù)的分類不重要。如果很重要,可以在SQL DDL中加入位置指示器用
來(lái)指示元素顯示的順序。
(5) 枚舉
在我們查看關(guān)于地址的模式時(shí),你可能已經(jīng)認(rèn)識(shí)到h e a d q u a r t e r s屬性值只能是y e s或n o。一種
可以實(shí)現(xiàn)的方法是把h e a d q u a r t e r s創(chuàng)建為一個(gè)布爾字段,但這在后面可能會(huì)產(chǎn)生問(wèn)題,例如再增
加一個(gè)'Used To Be'的選項(xiàng)。這樣的話,我們希望建立對(duì)枚舉的一般的需求,以便可以用在任何
環(huán)境下。
首先,需要設(shè)置一個(gè)表,用來(lái)保存枚舉值(如圖1 0 - 2 8)。把它叫做e n u m _ h e a d q u a r t e r s用來(lái)
減少與其他名字沖突的可能性。
圖10-28
這個(gè)表僅有一列,因?yàn)樗恍枰琱 e a d q u a r t e r s所可能有的值。因?yàn)?br />
它們是唯一的,所以可以被設(shè)置為主鍵。在表中的數(shù)據(jù)如圖1 0 - 2 9所示。
這就給出枚舉的規(guī)則:
• 規(guī)則5—對(duì)于每一個(gè)具有枚舉類型的屬性,用與屬性節(jié)點(diǎn)值相同的
名字創(chuàng)建一個(gè)表,使用前綴e n u m _。包含一個(gè)與屬性節(jié)點(diǎn)同名的可變長(zhǎng)字符串列,使用前
綴p k _ e n u m _和variable-legnth string數(shù)據(jù)類型。把枚舉的值填在表中。
我們需要再次修改規(guī)則3,以保證不會(huì)丟失被枚舉的屬性的信息:
• 規(guī)則3—對(duì)于每個(gè)屬性節(jié)點(diǎn):
402使用XML 高級(jí)編程
下載
圖10-29
• 創(chuàng)建一個(gè)與屬性節(jié)點(diǎn)同名的列:
- 如果屬性是一個(gè)正常的屬性使用前綴a t t r _。
- 如果屬性是一個(gè)枚舉類型使用前綴a t t r _ e n u m _。
• 如果要求屬性,那么列不應(yīng)該允許為N U L L值。
實(shí)際上我們?nèi)匀粵](méi)有完成規(guī)則3!在后面會(huì)看到更多⋯⋯
(6) 擁有i d數(shù)據(jù)類型的屬性
出版商的定義的下一部分是它的名稱和地址的列表:
程序清單1 0 - 4 8
每一個(gè)< P u b l i s h e r >都有一個(gè)叫做< I m p r i n t s >的元素,按順序包含名為< I m p r i n t >的元素。每
一個(gè)< I m p r i n t >元素都有一些文本,像名稱和地址的標(biāo)題和一個(gè)叫s h o r t I m p r i n t N a m e的屬性,它是
i d類型數(shù)據(jù)。
使用規(guī)則2我們創(chuàng)建了兩個(gè)新表, I m p r i n t s和I m p r i n t,每一個(gè)都指向它們的父元素。第一個(gè)
表看上去如圖1 0 - 3 0所示。
圖10-30
第二個(gè)表—I m p r i n t—包含文本內(nèi)容,所以有一個(gè)p c d a t a列。這也是按規(guī)則2處理的。僅
有一件事我們沒(méi)有注意到,就是s h o r t I m p r i n t N a m e屬性。這個(gè)屬性為i d類型,意思就是它將用于
X M L文檔的其他部分,用來(lái)引用一個(gè)元素。實(shí)際上,這個(gè)模式已經(jīng)設(shè)置了這樣一種方式就是
< T h r e a d >元素—稍后我們就會(huì)看到—可以通過(guò)引用它的簡(jiǎn)稱來(lái)指向一個(gè)名稱地址。因?yàn)槭?br />
用了枚舉信息,我們不想丟掉這個(gè)信息,所以我們通過(guò)在列的前面加上a t t r _ i d _來(lái)保留它。所以
修改規(guī)則3:
• 規(guī)則3—對(duì)于每個(gè)屬性節(jié)點(diǎn):
• 創(chuàng)建一個(gè)與屬性節(jié)點(diǎn)同名的列:
- 如果屬性是一個(gè)正常的屬性使用前綴a t t r _。
- 如果屬性是一個(gè)枚舉類型使用前綴a t t r _ e n u m _。
- 如果屬性是i d類型使用前綴a t t r _ i d _。
• 如果要求屬性,那么列不應(yīng)該允許為N U L L值。
所以I m p r i n t表看上去如圖1 0 - 3 1所示。
第10章XML和數(shù)據(jù)庫(kù)使用403 下載
圖10-31
(7) 作為容器的元素
注意在這里我們介紹的一些冗余的東西是不可避免的。如果我們?cè)谠O(shè)計(jì)這個(gè)數(shù)據(jù)庫(kù)的時(shí)候
沒(méi)有想過(guò)將數(shù)據(jù)輸出為X M L,那么可能不需要I m p r i n t s表,因?yàn)樗辉试SI m p r i n t表中的名稱地址
能夠同P u b l i s h e r表相連接。像這樣的一個(gè)表結(jié)構(gòu)通常是用在當(dāng)想讓每一個(gè)出版商有許多名稱地
址的時(shí)候,但是在我們的模式中,每一個(gè)出版商僅有一個(gè)名稱地址。如果我們從節(jié)點(diǎn)的角度來(lái)
表現(xiàn)這個(gè)數(shù)據(jù)庫(kù)結(jié)構(gòu),那么下面如圖1 0 - 3 2所示的兩個(gè)結(jié)構(gòu)沒(méi)有什么不同。
圖10-32
這是因?yàn)椋琁 m p r i n t s沒(méi)有自己的數(shù)據(jù)—它只是其他數(shù)據(jù)的一個(gè)簡(jiǎn)單容器。然而,盡管我們
想使關(guān)系數(shù)據(jù)庫(kù)盡可能的高效,但也不得不保留這個(gè)表,與沒(méi)必要的多個(gè)的連接在一起。否則
當(dāng)輸出X M L的時(shí)候,將沒(méi)有辦法知道在< P u b l i s h e r >與每個(gè)< I m p r i n t >之間有一個(gè)包含元素。
中國(guó)航空網(wǎng) m.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(131)