亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

小項(xiàng)目之?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)經(jīng)驗(yàn)分享

系統(tǒng) 2403 0

????? 背景:

????? 最近給客戶做了一個(gè)小工具,主要是為了減輕客戶那邊的工作壓力,一般公司都有很多自己的業(yè)務(wù)數(shù)據(jù)需要定期發(fā)給自己的員工,比如各種指標(biāo)數(shù)據(jù),績(jī)效評(píng)比等, 大多都是按公司的組織結(jié)構(gòu)來(lái),一級(jí)一級(jí)往下發(fā),領(lǐng)導(dǎo)接收的數(shù)據(jù)一般會(huì)包含自己下一級(jí)人員的數(shù)據(jù),所以客戶這邊也不例外,每次到了一定的周期(每周,每月或者每季度),就會(huì)由專業(yè)人員將一份完整的數(shù)據(jù)分別按組織結(jié)構(gòu)一級(jí)一級(jí)往下發(fā),全體領(lǐng)導(dǎo)基本都需要做這件事。
?????
????? 于時(shí),我們需要給領(lǐng)導(dǎo)做一個(gè)自動(dòng)分發(fā)數(shù)據(jù)的工具,將這些數(shù)據(jù)按一定要求自動(dòng)的發(fā)送到各自人的郵箱中,需求給簡(jiǎn)單,就是發(fā)郵件,從程序功能上講也就分三部分:
????? 1:解析數(shù)據(jù)源并加載到數(shù)據(jù)庫(kù)中
????? 2:提取數(shù)據(jù)并發(fā)送郵件
????? 3:將發(fā)送結(jié)果反饋給指定的人
?????
????? 之前我們一致認(rèn)為數(shù)據(jù)源是穩(wěn)定的,數(shù)據(jù)源格式是excel,里面的sheet名稱及數(shù)量是固定的,字段也是固定的(字段數(shù)量以及名稱),所以我們有一種非常簡(jiǎn)單的做法,就是將excel的每個(gè)sheet映射成數(shù)據(jù)庫(kù)中的一張表,表字段和excel字段一一對(duì)應(yīng)即可,最后根據(jù)不同的業(yè)務(wù)數(shù)據(jù)需求,構(gòu)建不同的郵件模塊,最后實(shí)現(xiàn)郵件發(fā)送。
?????
????? 問(wèn)題:
????? 但有一天,我們的客戶負(fù)責(zé)人發(fā)生了變更,他提出了一個(gè)問(wèn)題:如果以后發(fā)送的數(shù)據(jù)發(fā)生變化,你們的軟件能支持嗎,比如今年我們的excel發(fā)送的是10個(gè)指標(biāo)數(shù)據(jù),明年如果想再增加5個(gè)或者重新替換原來(lái)的指標(biāo)。
?????
????? 由于我們對(duì)此工具的定位非常低,及不用花太大代價(jià)在小工具上,盡早用上盡早減輕客戶工作量,同時(shí)也會(huì)降低開發(fā)成本,當(dāng)時(shí)我們理解為數(shù)據(jù)源不會(huì)輕易發(fā)生變化,所以設(shè)計(jì)了上面的解決方案,及不支持?jǐn)?shù)據(jù)的動(dòng)態(tài)變更。但新的負(fù)責(zé)人提出了我們的方案不夠靈活,可擴(kuò)展性,可配置性稍弱,為此我們不得不重新設(shè)計(jì)方案以支持指標(biāo)數(shù)據(jù)的動(dòng)態(tài)變化需求,哎,怎么說(shuō)呢,如果我們給客戶想的多想的全,他們也有可能說(shuō),就一小工具不用這么復(fù)雜吧,總之既然問(wèn)題提出我們就需要想辦法及解決呀。
?????
????? 習(xí)慣性思維產(chǎn)生的解決方案:
????? 動(dòng)態(tài)構(gòu)建數(shù)據(jù)表,及首先解析每個(gè)sheet有多少列,然后將這些列信息映射為數(shù)據(jù)庫(kù)表,這個(gè)方案有如下缺點(diǎn):
????? 缺點(diǎn)一:sheet的列名需要特殊處理才行,我們需要在前面增加 []標(biāo)識(shí),以防止字符不符合表字段要求;
????? 缺點(diǎn)二:理論上數(shù)據(jù)庫(kù)表的列最大數(shù)沒有excel的大,即在某種極端的情況下,無(wú)法容納所有excel列數(shù)據(jù);
????? 缺點(diǎn)三:在數(shù)據(jù)庫(kù)查詢上不方便,因?yàn)樽侄味际俏粗模?
????? 缺點(diǎn)四:在綁定email模板(email模板是用xlst來(lái)做的)上也是個(gè)問(wèn)題,同樣也是字段都是未知的;
????? 缺點(diǎn)五:每次導(dǎo)入數(shù)據(jù)都需要全部刪除數(shù)據(jù)庫(kù)中的表,然后重建,這會(huì)帶來(lái)一些不可控的因素。
?????
????? 我同事最終設(shè)計(jì)了一套表結(jié)構(gòu),能夠非常完善的解決我們所遇到的問(wèn)題,且結(jié)構(gòu)非常簡(jiǎn)單。
??????
????? 完美解決方案:
????? 將每個(gè)sheet的數(shù)據(jù)分解為三部分:
????? 1:列信息表Column,主要記錄列名稱
????? 2:行信息表Row,主要記錄行號(hào)
????? 3:數(shù)值信息Data,以列坐標(biāo)以及行坐標(biāo)能夠在sheet上唯一確定一個(gè)數(shù)據(jù),這里記錄數(shù)據(jù)信息。
?????

??????數(shù)據(jù)庫(kù)表結(jié)構(gòu)圖如下:

??????????????????????????????????????????? 小項(xiàng)目之?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)經(jīng)驗(yàn)分享
????? 方案分析:
????? 1:將sheet中的所以列信息分別插入到Column表中,多少列就插入多少行記錄,這樣就能夠無(wú)限支持列數(shù)據(jù)的增加,而不會(huì)受到表字段數(shù)量的限制。
????? 2:將行信息,對(duì)excel左側(cè)對(duì)應(yīng)的行號(hào)數(shù)據(jù)插入到Row中,有多少行就插入多少。
????? 3:最后是數(shù)據(jù)的存儲(chǔ),主要是利用二維坐標(biāo)定位邏輯來(lái)確定數(shù)據(jù)。

????? 4:盡管看起來(lái)一個(gè)sheet的數(shù)據(jù)分成三個(gè)表來(lái)存儲(chǔ),但每個(gè)表存儲(chǔ)的內(nèi)容都相當(dāng)簡(jiǎn)單,邏輯清晰,所以不會(huì)帶來(lái)更大的復(fù)雜性問(wèn)題。

?

?????? 如何將數(shù)據(jù)庫(kù)中的數(shù)據(jù)加載到內(nèi)存中,我這里構(gòu)建一個(gè)對(duì)象,此對(duì)象代表excel中的一行數(shù)據(jù),如果是sheet所有數(shù)據(jù)可以用List<SheetData>來(lái)表示。ColumnInfo中的Key就是列名稱,Value就是某一列的某一行的數(shù)據(jù)。按照我們的表結(jié)構(gòu),構(gòu)建下面的對(duì)象模型也是比較容易的。

?

? public ?? class ?SheetData
????{
??????? public ?List<ColumnInfo>?Columns?{? get ;? set ;?}
????}
???? public ? class ?ColumnInfo
????{
???????? public ? string ??Key{ get ; set ;}
???????? public ? string ??Value{ get ; set ;}
????}

?

?????? 如何綁定Email模板,既然我們有了明確的對(duì)象結(jié)構(gòu),那么應(yīng)用xsl語(yǔ)法就更加容易了:

??????

<table?style= " font-size:12; " >
??????????<tr>
????????????<xsl: for -each? select = " Email/SheetData/Columns/ColumnInfo " >
??????????????<td?style= " background-color:#FFFF00;width:85px; " >
????????????????<xsl:value-of? select = " Key " />
??????????????</td?>
????????????</xsl: for -each>
??????????</tr>
??????????<tr>
????????????<xsl: for -each? select = " Email/SheetData/Columns/ColumnInfo " >
??????????????<td>
????????????????<xsl:value-of? select = " Value " />
??????????????</td?>
????????????</xsl: for -each>
??????????</tr>
????????</table>


??????
????? 上面的方案解決了之前方案的所有問(wèn)題,由于存儲(chǔ)數(shù)據(jù)的表結(jié)構(gòu)是可知的,所以在數(shù)據(jù)庫(kù)查詢以及email模板的綁定上都不會(huì)有任何問(wèn)題。

小項(xiàng)目之?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)經(jīng)驗(yàn)分享


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 爱爱视频欧美 | 丁香狠狠色婷婷久久综合 | 亚洲欧美日韩在线 | 好吊妞乱淫欧美 | 日韩欧美一区二区三区在线 | 色综合久久最新中文字幕 | 久久精品亚洲欧美日韩久久 | 日韩精品成人a在线观看 | 国产亚洲精品久久久久久久网站 | 91久久线看在观草草青青 | 99久久精品6在线播放 | 成人a毛片免费全部播放 | 久草在线视频资源 | 日韩小视频在线播放 | 手机在线一区二区三区 | 亚洲一区二区三区在线 | 日本涩涩网站 | 欧美无吗 | 日韩精品一区二区三区 在线观看 | 好吊妞人成免费视频观看 | 深夜免费 | 欧美一级特黄特黄毛片 | 亚洲五月色 | 免费看羞羞视频的网站 | 日韩专区中文字幕 | 免费看欧美日韩一区二区三区 | 看一级特黄a大片日本片黑人 | 亚洲国产成人久久三区 | www.五月天婷婷 | 欧美精品h在线播放 | 爱爱小视频免费体验区在线观看 | 色老久久精品偷偷鲁一区 | 精品免费在线视频 | 国产精品久久久久久久成人午夜 | 国产女主播在线 | 狠狠色丁香六月色 | 成人精品久久 | 久久精品国产一区二区三区 | 2021国产精品久久 | 91精品国产欧美一区二区 | 老师邪恶影院a啦啦啦影院 老师在办公室被躁到白浆 老湿机午夜影院 |