国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

實(shí)體的動(dòng)態(tài)屬性在數(shù)據(jù)庫設(shè)計(jì)中的解決方案

2017-04-08 12:47:52王洋
電腦知識與技術(shù) 2017年5期
關(guān)鍵詞:數(shù)據(jù)庫設(shè)計(jì)關(guān)系數(shù)據(jù)庫

王洋

摘要:該文主要是針對數(shù)據(jù)庫設(shè)計(jì)中遇到實(shí)體的動(dòng)態(tài)屬性的問題,分別結(jié)合關(guān)系型和非關(guān)系型兩大類數(shù)據(jù)庫技術(shù),介紹解決實(shí)體屬性可變性問題的解決方法:關(guān)系弄的解決方案是改行為列和使用兩個(gè)關(guān)系實(shí)體,非關(guān)系型的解決方案是采用HBase模型和MongoDB模型。這些方案為開發(fā)用戶的數(shù)據(jù)需求提供多種可選方案,極大地為用戶提供了方便。

關(guān)鍵詞: 實(shí)體動(dòng)態(tài)屬性;數(shù)據(jù)庫設(shè)計(jì);關(guān)系數(shù)據(jù)庫;非關(guān)系數(shù)據(jù)庫

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2017)05-0009-02

1 問題的提出

隨著大數(shù)據(jù)時(shí)代的來臨,結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)與非結(jié)構(gòu)化數(shù)據(jù)已廣泛存在于各個(gè)軟件應(yīng)用中。任何移動(dòng)應(yīng)用和系統(tǒng)都離不開數(shù)據(jù)庫進(jìn)行存儲數(shù)據(jù),而數(shù)據(jù)的復(fù)雜性給它們的開發(fā)帶來了困難和挑戰(zhàn)。

在現(xiàn)實(shí)生活中,社會現(xiàn)實(shí)中的萬事成物都是一個(gè)動(dòng)態(tài)系統(tǒng)。隨著時(shí)間的推移和事情的發(fā)展,各種實(shí)體都會發(fā)展變化,具體體現(xiàn)在實(shí)體屬性的變化上,因此,我們稱之為實(shí)體的動(dòng)態(tài)屬性[1]。例如,在一款銀行績效考核系統(tǒng)中的客戶經(jīng)理實(shí)體,隨著業(yè)務(wù)的發(fā)展,客戶經(jīng)理的其考核內(nèi)容也會發(fā)生變化,會有存款業(yè)績、貸款業(yè)務(wù)、基金業(yè)績、是否投訴等不斷增加,也會產(chǎn)生相對應(yīng)的業(yè)績數(shù)值,這些不斷業(yè)績都稱為該客戶經(jīng)理實(shí)體的動(dòng)態(tài)性,詳情如表1客戶經(jīng)理實(shí)體2017年1月份業(yè)務(wù)需求表所示。

在實(shí)際的項(xiàng)目開發(fā)中,固定數(shù)量的、明確的實(shí)體屬性,有利于軟件設(shè)計(jì)與開發(fā)人員進(jìn)行項(xiàng)目開發(fā)。但是,動(dòng)態(tài)屬性的實(shí)體,由于實(shí)體屬性的個(gè)數(shù)未知,屬性名稱未知,在系統(tǒng)運(yùn)行過程中,根據(jù)業(yè)務(wù)的需要,隨時(shí)增添新的屬性,因此,給項(xiàng)目開發(fā)人員帶來了困難和挑戰(zhàn)。筆者在數(shù)據(jù)庫設(shè)計(jì)方面經(jīng)過長期的實(shí)踐,探索出了針對該問題的實(shí)體的動(dòng)態(tài)屬性在數(shù)據(jù)庫設(shè)計(jì)中的解決方法,希望對有相同需要的數(shù)據(jù)庫設(shè)計(jì)人員或軟件開發(fā)人提供一點(diǎn)參考價(jià)值。

2 定義相關(guān)數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)庫中的數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)對象的數(shù)據(jù)類型、內(nèi)容、性質(zhì)有關(guān)的,是對數(shù)據(jù)對象的一個(gè)靜態(tài)描述。為了便于說明,還以上述績效考核系統(tǒng)中的客戶經(jīng)理實(shí)體為例進(jìn)行描述。該客戶經(jīng)理實(shí)體包括存款業(yè)績、貸款業(yè)務(wù)、基金業(yè)績、是否投訴等屬性,其在關(guān)系數(shù)據(jù)庫中可以定義成相關(guān)字段,具體詳細(xì)結(jié)構(gòu)描述如下:

Create Table ClientManager(

CName nvarchar(50), //姓名字段

CDeposit decimal(18, 2), //存款業(yè)績字段

CLoan decimal(18, 2), //貸款業(yè)績字段

CFund decimal(18, 2), //基金業(yè)績字段

CIsComplain nvarchar(2), //是否投訴字段

... //未知屬性字段

很顯然,由于實(shí)體未知屬性的存在,上述結(jié)構(gòu)中的字段不明確,這樣的設(shè)計(jì)在目前的數(shù)據(jù)庫技術(shù)中不能得以實(shí)現(xiàn)。

3 關(guān)系數(shù)據(jù)庫中實(shí)體的設(shè)計(jì)方法

目前,市場要流行的關(guān)系型數(shù)據(jù)庫門類眾多,有甲骨文公司的Oracle、MySQL,有微軟公司的SQL Server,還有針對移動(dòng)應(yīng)用的SQLite。下面針對上述實(shí)體的動(dòng)態(tài)屬性問題,給出兩種關(guān)系型數(shù)據(jù)庫的解決方法。

3.1 采用改行為列

為了改變上述字段不明確的問題,從表1中可以看出是二維表中的字段不明確,采用以行來代替列的形式,就可以把未知的列的值作為一條記錄存儲于表中,這樣,就可以根據(jù)需求動(dòng)態(tài)滿足字段的增加或減少,解決該問題。但是,這樣需要解決兩個(gè)問題,一個(gè)是屬性名的問題和另一個(gè)屬性值的問題。因此,行轉(zhuǎn)為列的形式中,二維表中需要屬性名和屬性值兩列。具體的在客戶經(jīng)理實(shí)體中,定義為經(jīng)理姓名、業(yè)績名稱和業(yè)績額,具體詳細(xì)結(jié)構(gòu)描述如下:

Create Table ClientManager(

CName nvarchar(50), //經(jīng)理姓名

CAchieveName nvarchar(50), //業(yè)績名稱字段

CAchieveValue nvarchar(50) //業(yè)績額字段

在關(guān)系數(shù)據(jù)庫中,客戶經(jīng)理的實(shí)體二維表中的業(yè)績和業(yè)績額從以行的形式轉(zhuǎn)為以列的形式,但是,表中的記錄數(shù)據(jù)增加,其具體形式如表2客戶經(jīng)理實(shí)體行轉(zhuǎn)成列后的樣式表所示。

3.2 采用兩個(gè)關(guān)系實(shí)體

采用行轉(zhuǎn)為列的方式能夠適應(yīng)簡單屬性值全都一個(gè)數(shù)據(jù)類型的動(dòng)態(tài)屬性的問題,比如,例子中的業(yè)績額全為數(shù)值類型,開發(fā)人員在進(jìn)行開發(fā)實(shí)現(xiàn)功能時(shí)可以進(jìn)行統(tǒng)一計(jì)算。但是,如果屬性不是一個(gè)統(tǒng)一的類型,比如例子中的業(yè)績額有數(shù)值類型的,還有字符類型的。這種情況下,程序開發(fā)人員,在進(jìn)行數(shù)據(jù)取值時(shí),要有目的的進(jìn)行運(yùn)算,而在例子中屬性值的數(shù)據(jù)類型不明確,給開發(fā)人員帶來了麻煩。解決這種復(fù)雜的情況,可以增加一個(gè)實(shí)體表對屬性值的取值詳細(xì)信息進(jìn)行描述,而將在該實(shí)體中將上一個(gè)實(shí)體的屬性名作為外鍵,這樣,就能夠保證數(shù)據(jù)的一致性。在例子中,在客戶經(jīng)理實(shí)體的基礎(chǔ)上,增加一個(gè)業(yè)績設(shè)置實(shí)體,其字段有業(yè)績名稱、業(yè)績額的取值類型、業(yè)績額的取值長度、業(yè)績額的取值精度,具體表述所下:

Create Table AchieveSet(

AchieveName nvarchar(50), //業(yè)績名稱字段

AValueDataType nvarchar(50), //業(yè)績額的取值類型

AValueLength int, //業(yè)績額的取值長度

AValuePrecision int //業(yè)績額的取值精度

綜上所述,通過行轉(zhuǎn)列的方式,解決屬性值同一類型的動(dòng)態(tài)屬性問題;通過兩個(gè)實(shí)體來解決屬性值非同一類型的復(fù)雜的動(dòng)態(tài)屬性問題。程序開發(fā)人員可以根據(jù)不同的需求,采用不同的方法對系統(tǒng)進(jìn)行開發(fā)。

4 非關(guān)系數(shù)據(jù)庫實(shí)體的設(shè)計(jì)方法

隨著技術(shù)的發(fā)展,對半結(jié)構(gòu)化、非結(jié)構(gòu)化的數(shù)據(jù)進(jìn)行處理,出現(xiàn)了NoSQL數(shù)據(jù)管理技術(shù)的發(fā)展。下面結(jié)合非關(guān)系數(shù)據(jù)技術(shù),給出兩種解決動(dòng)態(tài)屬性問題的解決方法。

4.1 采用HBase模型

HBase是一個(gè)分布式的,面向列族進(jìn)行存儲的數(shù)據(jù)庫[4]。在HBase數(shù)據(jù)庫中,動(dòng)態(tài)屬性可以采用它的數(shù)據(jù)模型來進(jìn)行實(shí)現(xiàn)。定義一個(gè)屬性列族,而在該列族中根據(jù)需要可以任意動(dòng)態(tài)放入子列即可。具體操作是定義一個(gè)客戶經(jīng)理實(shí)體,在該實(shí)體中創(chuàng)建一個(gè)業(yè)績列族,通過行鍵來存儲客戶經(jīng)理實(shí)體記錄中的經(jīng)理名稱,具體描述如下:

create ‘ClientManager,'CAchieve'

其中,ClientManager是客戶經(jīng)理實(shí)體,'CAchieve'是客戶經(jīng)理的業(yè)績。

實(shí)體表創(chuàng)建完成后,可以進(jìn)行操作,進(jìn)行存儲記錄數(shù)據(jù),其操作如下:

put 'ClientManager','張三','CAchieve:存款業(yè)績','10000'

put 'ClientManager','張三','CAchieve:是否投訴','是'

put 'ClientManager','李四','CAchieve:基金業(yè)績','10500'

...

其中,張三、李四列使用的是HBase行鍵,'CAchieve'冒號后面是動(dòng)態(tài)屬性。

4.2 采用MongoDB模型

MongoDB數(shù)據(jù)庫是采用文檔、集合和數(shù)據(jù)庫三部分來對數(shù)據(jù)進(jìn)行組織[5]。在MongoDB數(shù)據(jù)庫中,動(dòng)態(tài)屬性可以采用它的數(shù)據(jù)模型來實(shí)現(xiàn),根據(jù)其文檔的機(jī)制來進(jìn)行實(shí)現(xiàn)。在例子中,采用定義一個(gè)客戶經(jīng)理實(shí)體的集合,在集合中插入定義好的記錄文檔,具體操作如下:

db.createCollection("'ClientManager'"); //定義客戶經(jīng)理集合

db.ClientManager.insert({"name":"李四","存款業(yè)績":10000",是否投訴":是})

db.ClientManager.insert({"name":"李四","基金業(yè)績":11000,"是否投訴":是})

其中,大括號{}內(nèi)的數(shù)據(jù)是文檔信息,存儲客戶經(jīng)理信息,而每一鍵值對記錄該客戶經(jīng)理實(shí)體的績效信息,比如,"存款業(yè)績":10000"等。每個(gè)文檔內(nèi)中的鍵值對中的鍵可以不相同,這樣,就達(dá)到了實(shí)現(xiàn)動(dòng)態(tài)屬性的要求。

5 總結(jié)

截止到目前為止,關(guān)系型數(shù)據(jù)庫理論和非關(guān)系型數(shù)據(jù)庫理論并存,而且他們都已經(jīng)發(fā)展得很成熟,在市場上廣泛應(yīng)用。作者從實(shí)際開發(fā)一款績效考核系統(tǒng)中,考核指標(biāo)不斷變化的實(shí)際需求出發(fā),調(diào)研和總結(jié)當(dāng)前市場上幾種處理實(shí)體屬性不斷變化的解決方案。根據(jù)不同的方案可選擇不同的數(shù)據(jù)庫技術(shù),在開發(fā)實(shí)施過程中需要相應(yīng)的技術(shù)條件和設(shè)備條件??傊?,希望給后來者的學(xué)習(xí)和工作提供一些建議和幫助。

參考文獻(xiàn):

[1] 唐小剛,譚石強(qiáng).一種實(shí)體屬性非確定的關(guān)系數(shù)據(jù)庫設(shè)計(jì)方法[J]. 湘南學(xué)院學(xué)報(bào),2006(4).

[2] 李華娟.關(guān)系型數(shù)據(jù)庫設(shè)計(jì)之實(shí)踐技巧[J].電子技術(shù)與軟件工程,2016(1).

[3] 李長春.動(dòng)態(tài)字段在VFP中的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代,1999(7).

[4] Lars George. HBase權(quán)威指南[M].人民郵電出版社,2013.

[5] 鄒貴金. MongoDB管理與開發(fā)實(shí)戰(zhàn)詳解[M].中國鐵道出版社,2013.

猜你喜歡
數(shù)據(jù)庫設(shè)計(jì)關(guān)系數(shù)據(jù)庫
關(guān)系數(shù)據(jù)庫在高爐數(shù)據(jù)采集系統(tǒng)中的應(yīng)用
山東冶金(2022年2期)2022-08-08 01:51:30
關(guān)系數(shù)據(jù)庫技術(shù)在計(jì)算機(jī)網(wǎng)絡(luò)設(shè)計(jì)中的應(yīng)用
計(jì)算機(jī)網(wǎng)絡(luò)設(shè)計(jì)中關(guān)系數(shù)據(jù)庫技術(shù)的應(yīng)用
試論數(shù)據(jù)庫設(shè)計(jì)在網(wǎng)站開發(fā)中的應(yīng)用
基于WEB的科研信息管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
軟件開發(fā)中數(shù)據(jù)庫設(shè)計(jì)理論的實(shí)踐
面向等級考試,探討高校理工科計(jì)算機(jī)基礎(chǔ)課程教學(xué)改革
考試周刊(2016年47期)2016-06-29 22:15:13
網(wǎng)站管理系統(tǒng)中數(shù)據(jù)庫設(shè)計(jì)的應(yīng)用研究
《數(shù)據(jù)庫原理及應(yīng)用》在線考試系統(tǒng)的設(shè)計(jì)
基于索引結(jié)構(gòu)的關(guān)系數(shù)據(jù)庫關(guān)鍵詞檢索
新河县| 和龙市| 兴国县| 西城区| 富锦市| 海安县| 新源县| 融水| 聊城市| 烟台市| 和田市| 乐平市| 新竹市| 黔江区| 南乐县| 鹤山市| 玛多县| 泽州县| 苍溪县| 昌宁县| 奉节县| 周宁县| 西乌| 阿图什市| 丽江市| 湖南省| 石楼县| 尉犁县| 石城县| 环江| 青阳县| 朝阳区| 内乡县| 滦平县| 达州市| 遂昌县| 封开县| 郓城县| 茶陵县| 潜江市| 思南县|