• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Web的數(shù)據(jù)導入工具設計

    2020-09-29 07:51何怡璇熊棠易修文
    電腦知識與技術(shù) 2020年17期
    關(guān)鍵詞:鍵值字段關(guān)聯(lián)

    何怡璇 熊棠 易修文

    摘要:在Linux系統(tǒng)中,使用Ruby on Rails 5框架設計一個基于Web的數(shù)據(jù)導入工具。將Excel數(shù)據(jù)導入任意數(shù)據(jù)庫中,并可定義導入策略。

    關(guān)鍵詞:數(shù)據(jù)導入;Ruby on Rails 5

    中圖分類號:TP311 ? ? ?文獻標識碼:A

    文章編號:1009-3044(2020)17-0046-03

    數(shù)據(jù)的批量導入是系統(tǒng)設計和使用中經(jīng)常都會遇到的問題,特別是采用Excel工具收集和處理之后的數(shù)據(jù),如何導入至業(yè)務系統(tǒng)數(shù)據(jù)庫并能正確應用于系統(tǒng),是系統(tǒng)設計人員必須考慮的。使用數(shù)據(jù)庫管理工具進行數(shù)據(jù)導入對操作人員技能有較高要求,且存在數(shù)據(jù)安全風險。同時,部分數(shù)據(jù)還存在不同表之間的關(guān)聯(lián)需求,使用數(shù)據(jù)庫管理工具導入就需要對這樣的數(shù)據(jù)進行預先處理,或者編寫SQL語句實現(xiàn)。

    這就提出一個需求,設計一個Web界面的數(shù)據(jù)導入工具,具有界面友好、可定制保存策略、可視化、支持關(guān)聯(lián)表等功能,以滿足一般用戶的使用需求。

    在Linux系統(tǒng)中,使用Ruby on Rails 5框架設計一個數(shù)據(jù)導入工具,使其具有上述功能特定。

    1 系統(tǒng)環(huán)境

    Ruby on Rails 5框架本身支持Windows、Linux、MacOS等系統(tǒng)環(huán)境,且使用對象關(guān)系映射(ORM)技術(shù)實現(xiàn)了數(shù)據(jù)庫類型不可知[1],在代碼編寫時注意避免直接使用SQL語句,就能實現(xiàn)一套系統(tǒng)在不同數(shù)據(jù)庫之間的自由轉(zhuǎn)換[2]。測試環(huán)境為Ubuntu16.04操作系統(tǒng),Rails 5.2.3,MySQL 5.7數(shù)據(jù)庫。

    2 過程分析

    2.1 策略列表

    用戶應可看到之前已保存的策略列表,可選擇根據(jù)已有策略導入或者新建策略。

    2.2 上傳文件

    不論用戶使用哪種方式,均需上傳源數(shù)據(jù)文件??蛻舳?、服務器端應對文件類型進行過濾,僅接受可識別的文件,如xlsx、csv等。

    2.3 讀取數(shù)據(jù)

    文件上傳之后,應讀取出文件中的數(shù)據(jù),并顯示。如果文件有多個工作表,應顯示出來,并支持人工選擇。

    2.4 定義策略

    如使用已有策略,應將策略展示在頁面上并支持修改;如為新建策略,應支持可視化定義策略并支持自動匹配。新建策略及修改策略應保持UI的一致性。

    2.5 保存策略并導入數(shù)據(jù)

    新建策略應可選擇是否保存,使用已有策略且發(fā)生策略更改時,應更新并持久化。不論策略是否保存,均應按當前策略導入數(shù)據(jù)并持久化。

    3 模型設計

    策略需要持久化保存,創(chuàng)建Rule類用來保存策略。

    3.1 Rule類的屬性

    Rule類用來存儲策略并可再次使用。至少應包含兩個字段。

    3.1.1 title字段

    title字段用于識別策略,便于再次使用。

    3.1.2 pattern字段

    pattern字段用于存儲策略文本。策略為JSON格式的文本數(shù)據(jù),利于在前端、應用層中保持一致性,且便于存儲。

    3.2 pattern格式

    pattern是整個工具的核心,用來定義如何導入數(shù)據(jù)。

    3.2.1 src

    src鍵值對用來定義數(shù)據(jù)源,即上傳文件中的第幾個工作表,從0開始。

    3.2.2 dest

    dest鍵值對用來定義數(shù)據(jù)目的,即系統(tǒng)中對應的ActiveRecord對象。

    3.2.3 f_r

    部分文件第一行為表頭。第一行是表頭還是數(shù)據(jù)應交由用戶判斷,f_r鍵值對用來定義第一行是否為表頭。

    3.2.4 map

    map鍵值對用來定義源數(shù)據(jù)中的字段與ActiveRecord對象各屬性的映射關(guān)系。因存在多個字段,其值為一個數(shù)組。數(shù)組的每個元素均為多個鍵值對組成的JSON格式對象。

    3.2.4.1 col

    col鍵值對用來定義該位置字段對應的ActiveRecord對象屬性名。

    3.2.4.2 type

    type鍵值對用來定義該位置字段對應的ActiveRecord對象屬性的字段類型。不同的字段類型在導入時會做特定的處理。

    3.2.4.3 not_unique

    not_unique鍵值對用來定義該位置字段對應的值在數(shù)據(jù)庫中是否要求唯一性。

    3.2.4.4 to_rel

    to_rel鍵值對用來定義該位置字段對應的值是否存在表關(guān)聯(lián)。如此值為false,則以下幾個鍵值對可以不做定義。

    3.2.4.5 rel_table

    rel_table鍵值對用來定義該位置字段關(guān)聯(lián)表的ActiveRecord對象名。

    3.2.4.6 rel_col

    rel_col鍵值對用來定義該位置字段關(guān)聯(lián)的ActiveRecord對象的對應屬性。

    3.2.4.7 rel_col_type

    rel_col_type鍵值對用來定義該位置字段關(guān)聯(lián)的ActiveRecord對象的對應屬性的字段類型。不同的字段類型在導入時會做特定的處理。

    3.2.4.8 rel_c_rol

    rel_c_rol鍵值對用來定義建立表關(guān)聯(lián)時返回的字段。

    3.2.4.9 rel_c_rol_type

    rel_c_rol_type鍵值對用來定義返回對應字段的字段類型。不同的字段類型在導入時會做特定的處理。

    3.2.4.10 rel_not_unique

    rel_not_unique鍵值對用來定義該位置字段關(guān)聯(lián)的ActiveRecord對象的對應屬性值在數(shù)據(jù)庫中是否要求唯一性。

    4 控制與視圖

    文件上傳之后,控制器調(diào)用組件讀取文件內(nèi)容。

    4.1 讀取源數(shù)據(jù)

    使用開源Gem Roo執(zhí)行所有常見的電子表格類型的讀訪問權(quán)限,包括Excel、LibreOffice、OpenOffice、CSV、Google spreadsheets等格式[3]。

    對于Excel 2013文件,使用Roo::Excelx.new((服務器端文件路徑))可以讀出文件中的數(shù)據(jù)內(nèi)容賦值給實例@data_src,并可按工作表進行訪問。@data_src.sheets以數(shù)組形式輸出各工作表名; @data_src.sheet(i).parse()可將第i個工作表以數(shù)組形式輸出,如該表沒有數(shù)據(jù),則輸出nil。

    4.2 編寫策略

    為了便于對策略進行可視化編寫,首先需要把讀取的源數(shù)據(jù)按工作表以Table樣式輸出在頁面上。如果數(shù)據(jù)量較大,可部分輸出。

    通過ApplicationRecord類的descendants方法可以獲得系統(tǒng)已有的ActiveRecord對象及屬性列表。

    通過以上準備工作即可建立控制面板,用于編寫策略。

    4.2.1 數(shù)據(jù)源及目的表

    采用下拉菜單的方式選擇源數(shù)據(jù)及目的表。源數(shù)據(jù)即文件中的第幾個工作表,目的表即數(shù)據(jù)要以哪個ActiveRecord對象導入數(shù)據(jù)庫。同時要有首行導入選項。

    4.2.2 字段映射

    當數(shù)據(jù)源、目的表選定之后,根據(jù)數(shù)據(jù)源數(shù)組的列數(shù)生成對應選項下拉菜單。當“第一行包含標題”復選框未選中時,按Excel習慣,按字母標識列;當前述復選框被選中時,應根據(jù)名稱進行自動對應。默認狀態(tài)下字段導入是允許重復的。

    4.2.3 關(guān)聯(lián)表

    當對應字段的“關(guān)聯(lián)表”選項被選中時,將出現(xiàn)更多選項。目標表即被關(guān)聯(lián)的表,目標域即數(shù)據(jù)將要被導入的域。默認狀態(tài)下字段導入是不允許重復的,返回的值為id;通過打開更多選項,能對上述兩個設定進行修改。當選擇返回域時,應根據(jù)原目標表目標域的類型進行限制,防止因用戶操作失誤造成數(shù)據(jù)類型不匹配。

    4.2.4 數(shù)據(jù)類型

    數(shù)據(jù)類型是根據(jù)ActiveRecord對象讀取,不能被人為控制。

    4.2.5 生成策略并提交

    頁面上有一個隱藏的表單元素pattern_text,值為pattern的JSON格式文本。

    為了統(tǒng)一新建與編輯策略時的腳本,應在頁面載入時使用JSON.parse方法將pattern_text的值序列化為JSON實例pattern;若pattern_text的值為空或不是JSON格式文本,將其賦值為“{}”后再執(zhí)行前述操作。生成前述選項時,如果pattern相應的值為null或undefined,則按默認值生成;否則讀入該值,并按值設置。

    完成設置后,點擊“導入”按鈕,再次運行策略生成腳本,根據(jù)各控件的值對pattern相應的鍵值對賦值;然后使用JSON.stringify方法將pattern轉(zhuǎn)化為字符串并賦值給pattern_text,然后提交后臺保存。為了便于日后再次調(diào)用,此處應設置保存選項。

    4.3 數(shù)據(jù)持久化

    策略文本提交到后臺,如要保存為模板,則按Rule類保存。

    策略在被使用前,需要再次序列化為JSON對象。JSON的統(tǒng)一規(guī)則使前/后端保持了很好的統(tǒng)一性。

    依然使用Roo得到的數(shù)組,并根據(jù)pattern[“src”]的值獲得需要導入的數(shù)據(jù)數(shù)組@src。對@src進行遍歷,每一個元素存為一條數(shù)據(jù)庫中的記錄。遍歷時根據(jù)pattern[“f_r”]的值決定是否導入@src[0]。

    4.3.1 構(gòu)造參數(shù)散列式

    構(gòu)造一個空散列式_params = {}用來記錄參數(shù)。

    4.3.2 字段映射

    遍歷@src[i]的每一個元素,如@src[i][j],按以下步驟進行導入操作。

    4.3.2.1 是否關(guān)聯(lián)

    讀取pattern[“map”][j][“to_rel”],如非,則直接導入,否則按關(guān)聯(lián)導入并返回值導入。

    4.3.2.2 關(guān)聯(lián)導入

    根據(jù)pattern[“map”][j][“rel_table”]、pattern[“map”][j][“rel_col”]確定ActiveRecord對象及字段,如pattern[“map”][j][“rel_not_unique”]為否,則按字段、值搜索,如有結(jié)果,則返回對象實例@rel;否則按pattern[“map”][j][“rel_table”]新建ActiveRecord對象實例@rel,并賦值保存。最后返回 @rel.attributes[pattern[“map”][j][“rel_c_rol”]]的值_value。

    4.3.2.3 字段賦值

    不管是直接導入還是關(guān)聯(lián),都牽涉到字段賦值。目標字段根據(jù)pattern[“map”][j][“col”]、pattern[“map”][j][“rel_col”]確定,值需要根據(jù)pattern[“map”][j][“type”]、pattern[“map”][j][“rel_col_ type”]進行預先處理。如轉(zhuǎn)換成字符串型、浮點型、日期型等。如為關(guān)聯(lián)導入按前述執(zhí)行得到值_value,否則將處理之后的值賦為_value。

    4.3.2.4 更新參數(shù)散列式

    使用merge方法將{ pattern[“map”][j][“col”].to_sym => _vlue}合并入_params,至此則完成了一個字段的處理。

    4.3.3 構(gòu)造對象實例并保存

    根據(jù)pattern[“dest”]獲取ActiveRecord對象,使用create方法和_params參數(shù)執(zhí)行存儲。至此一條完成的記錄按策略完成了導入。

    4.4 根據(jù)策略模板導入

    前述策略如果保存為模板,可以再次使用,上傳文件后讀取模板中的策略,并按策略設置控制面板。系統(tǒng)應可檢查提交后的模板策略是否應被更新并安最新策略執(zhí)行導入。

    5 結(jié)束語

    該工具能夠?qū)崿F(xiàn)可視化定制、保存策略,并支持表關(guān)聯(lián),達到了設計要求。但還存在只能單字段關(guān)聯(lián),不支持多個字段確定表關(guān)聯(lián)的問題,將在后續(xù)進行改進。

    參考文獻:

    [1] Active Record 基礎(chǔ)[EB/OL].[2019-12-20].https://ruby-china.github.io/rails-guides/active_record_basics.html.

    [2] 對象關(guān)系映射-維基中文鏡像,自由的百科全書[EB/OL]. [2019-12-20].https://zh.wikipedia.com/wiki/對象關(guān)系映射.

    [3] Documentation for roo (2.8.3) [EB/OL]. [2019-12-20].https://www.rubydoc.info/gems/roo/2.8.3.

    【通聯(lián)編輯:謝媛媛】

    猜你喜歡
    鍵值字段關(guān)聯(lián)
    圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
    不懼于新,不困于形——一道函數(shù)“關(guān)聯(lián)”題的剖析與拓展
    “一帶一路”遞進,關(guān)聯(lián)民生更緊
    奇趣搭配
    智趣
    CNMARC304字段和314字段責任附注方式解析
    無正題名文獻著錄方法評述
    關(guān)于CNMARC的3--字段改革的必要性與可行性研究
    注冊表值被刪除導致文件夾選項成空白
    “掃除”技巧之清除惡意程序
    陇西县| 南开区| 松溪县| 名山县| 介休市| 永顺县| 灵璧县| 尼玛县| 皮山县| 华安县| 平阴县| 宁阳县| 穆棱市| 金山区| 柘荣县| 平江县| 平阴县| 邻水| 罗山县| 晋州市| 北票市| 民丰县| 龙门县| 吉水县| 河北省| 石棉县| 高碑店市| 凤山市| 夏邑县| 三都| 武川县| 土默特右旗| 定边县| 涟水县| 沧州市| 渝北区| 紫云| 莱州市| 德阳市| 师宗县| 绥德县|