專案中樹的設計

2021-08-30 19:57:20 字數 2873 閱讀 5128

62.  現在開始做分銷商這一塊的功能,主要有乙個樹形的功能。這個樹形結構功能我們做得不是很好,不太靈活 ,關於這個樹形結構有一些元件,做的比較好。在這個專案裡不使用。

63.  先來看一下,樹的幾種設計方式:

1,不帶冗餘字段,id,pid    一般使用id,pid已經足夠了。但是這種方式在

遍的時候有乙個效率的問題,因為我要看一下下面有沒有結點。

2, 帶冗餘字段  id,pid,isleaf,childrencount     這種方式:通常引入乙個看它是不是葉子,我也可以加入他有多少孩子。這樣我容易算出來 ,我拿到這個欄位一看,下面有多少孩子我知道了。而沒有必要每次算,

3, 採用固定的字串,00  01 001 0001

1.    00所有分銷商

2.    01華北區

3.    001北京市

4.    0001北京醫藥股份****

64.  再來看一下這張分銷商資訊的表,這個乙個自連線,在這裡有乙個pid,pid裡面的值全部**於id,

65.  分銷商在這棵樹形結構上都 是平等的。比如說北京市下面有北京醫藥股份****,這可能是一級分銷商,如果還有乙個二級分銷商也是在北京市下面,不會在北京醫藥股份****下面還顯示二級。

66.  我們分銷商要屬於乙個區域,華北區,北京市,這些都是區域,區域下面掛了分銷商,我們的設計是這樣的,就放在一張表裡面,這張表裡面既放了區域又放了分銷商,以前 提到過,這樣不太好,冗餘量太大,因為假如說是區域的話,它有名稱,id,pid,那級別,分銷商**,其它的都沒有,那麼就都冗餘了,         另外還有乙個終端客戶表,裡面也有乙個樹形結構要做,其實和分銷商差不多,那麼在終端客戶裡面你又會重複寫區域相關的記錄,如北京 ,,,,,,當時 說過最好是把樹形結構區域抽出來。區域是乙個樹形結構,分銷商只屬於它,所以單獨建一張分銷商表,再抽乙個區域這樣會好點。分銷商,終端都不是樹形結構,只要把這兩個往上掛就可以了。區域是乙個樹形結構,但是我們沒有採用這種方式,就放一張表裡面,因為放一張表裡面,大家要處理一些事情,有點麻煩,為了給大家增加一點難度,左連線,右連線,

* 得到頂級目錄

* @param regioncolumnid

* @return

public int getmytopregioncolumnid(int regioncolumnid) else {

return getmytopregioncolumnid(regioncolumn.getparentid());

/** 得到欄目樹 **/

public string getcatetree(string tree, int rootcolumnid,int regionid) {

regioncolumn rootbean = regioncolumndao.getbeanbyid(rootcolumnid);

stringbuffer treestrbuf = new stringbuffer();

if (rootbean != null) {

+ "\",");

listsublist = getsubcategory(rootcolumnid, 0, regionid);

if (sublist != null && sublist.size() > 0) {

dumpcatalogtree(tree, sublist, treestrbuf, rootcolumnid,regionid);

return treestrbuf.tostring();

public string getcatetree(string tree, int regionid){

return this.getcatetree(tree, 0, regionid);

/** 遞迴得到樹 **/

private void dumpcatalogtree(string tree, listlisbean,

stringbuffer treestrbuf, int parentid,int regionid) {

for (regioncolumn bean : lisbean) {

+ bean.getname() + "\",");

if (bean.getidentifier() != null

&& bean.getidentifier().equals("qzz"))

else if (bean.getidentifier() != null

&& bean.getidentifier().equals("zpr"))

else

+ bean.getregioncolumnid() + "',");

listsublist = getsubcategory(bean

.getregioncolumnid(), 0,regionid);

if (sublist != null && sublist.size() > 0) {

dumpcatalogtree(tree, sublist, treestrbuf, bean

.getregioncolumnid(),regionid);

public regioncolumn getregioncolumn(int id) {

return regioncolumndao.getbeanbyid(id);

public listgetsubcategory(int cataid, int rootcloumnid,int regionid) {

return regioncolumndao.getsubcategory(cataid, rootcloumnid,regionid);

public int gettopregioncolumnid(int cata_id) {

return regioncolumndao.gettopregioncolumnid(cata_id);

專案中工廠 策略設計模式的使用

專案中需要同步中臺基礎資料事件包含 專案整體架構 針對這些不同的資料,都有增加 編輯 刪除操作 策略介面和一組實現這個介面的策略類 基於介面而非實現程式設計,可以靈活地替換不同的策略 author lc desc 資料處理介面定義 date 2021 1 7 public inte ce syncd...

BI專案中ETL設計與思考

etl即資料抽取 extract 轉換 transform 裝載 load 的過程,它是構建資料倉儲的重要環節。etl是將業務系統的資料經過抽取 清洗轉換之後載入到資料倉儲的過程,目的是將企業中的分散 零亂 標準不統一的資料整合到一起,為企業的決策提供分析依據。etl是bi專案重要的乙個環節。通常情...

BI專案中ETL設計與思考

etl是將業務系統的資料經過抽取 清洗轉換之後載入到資料倉儲的過程,目的是將企業中的分散 零亂 標準不統一的資料整合到一起,為企業的決策提供分析依據。etl是bi專案重要的乙個環節。通常情況下,在bi專案中etl會花掉整個專案的1 3的時間,etl設計的好壞直接關接到bi專案的成敗。etl的設計分三...