線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1240
推到 Plurk!
推到 Facebook!

關於索引問題

答題得分者是:P.D.
dancer_in_rain
一般會員


發表:5
回覆:9
積分:2
註冊:2010-05-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-06-11 14:41:51 IP:114.25.xxx.xxx 訂閱
情況說明:

我有一個.DBF的檔案(以前在DOS CLIPPER 發展的資料庫檔案),
現在要轉成 PARADOX 的 .DB 檔案,因為 .DB 的主索引不能重覆,而
我在轉資料時,一定會有重覆發生(像是訂單明細檔的訂單編號一定
重覆),所以我在轉時,資料檔.DB先沒設主索引,轉完之後,再用程式
給予同一訂單編號的明細資料一個序號,再進DATABASE DESKTOP 用
手動的方式加上索引。(在發展程式過程中,轉入實際資料以供測試,所以
會常重覆的做到這動作)

問題:
主索引可以在先有資料後,在程式中讓它再產生嗎?
我試過 Table.AddIndex 這方法,可是它好像只能用在 secondary index上耶
有沒有其他的方法可以取代呢?

謝謝!

dancer_in_rain
一般會員


發表:5
回覆:9
積分:2
註冊:2010-05-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-06-11 22:59:35 IP:114.36.xxx.xxx 訂閱
自己想到一個笨方法,用一個中介過渡檔,先產生明細檔的序號,再轉入已有相
同資料結構且已有主索引的空檔。

不知有沒有更聰明的方法呢?
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-06-13 01:51:17 IP:118.169.xxx.xxx 未訂閱
索引的目的是加快搜尋的動機, 但以你本案為例, 假設master 與 detail 是靠一組 "訂單編號" 在關聯的話, 
一旦設定主索引, 勢必造成訂單明細重覆的記錄不見, 但你加入一個序號做索引, 無助於讀取或搜尋的速度,
因為訂單編號無法索引, 搜尋時仍然是逐筆掃瞄, 所以沒有意義
建議
1.想辦法找到 "訂單編號" 其他欄位(例如項次, 或序號)一起做複合索引
2.db檔中有一個 A 的欄位結構屬性, 是 DB 自動加序號的, 可以做為主索引,
再把 "訂單編號" 做 second index 亦可
3.在程式中是可以建立主索引的, 重點在於
宣告一個 xIndex: TIndexOptions; // 注意要uses DB
指定 xIndex:= [ixPrimary, ixUnique, ixDescending, ixCaseInsensitive, ixExpression];
請自行決定 [...] 要保留的屬性, 主索引則一定要保留 [xPrimary, 其他可斟酌移除
建立索引
Table1.AddIndex(索引檔名,索引欄位名稱,xIndex,'')
注意, 建立索引前, 一定要用 fileexists() 檢查舊的索引檔是否存在, 如是則必須先刪除
主索引為 .px
二, 三索引為 xg0, yg0 ... 等等

===================引 用 dancer_in_rain 文 章===================
情況說明:

我有一個.DBF的檔案(以前在DOS CLIPPER 發展的資料庫檔案),
現在要轉成 PARADOX 的 .DB 檔案,因為 .DB 的主索引不能重覆,而
我在轉資料時,一定會有重覆發生(像是訂單明細檔的訂單編號一定
重覆),所以我在轉時,資料檔.DB先沒設主索引,轉完之後,再用程式
給予同一訂單編號的明細資料一個序號,再進DATABASE DESKTOP 用
手動的方式加上索引。(在發展程式過程中,轉入實際資料以供測試,所以
會常重覆的做到這動作)

問題:
主索引可以在先有資料後,在程式中讓它再產生嗎?
我試過 Table.AddIndex 這方法,可是它好像只能用在 secondary index上耶
有沒有其他的方法可以取代呢?

謝謝!

編輯記錄
P.D. 重新編輯於 2010-06-13 01:54:16, 註解 無‧
dancer_in_rain
一般會員


發表:5
回覆:9
積分:2
註冊:2010-05-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-06-14 10:31:01 IP:114.25.xxx.xxx 訂閱
非常感謝版主大大的撥冗回覆指導,非常詳細的解說,
已解決我的問題。

解決處理:

一:
依版主大大的建議,填入之資料改為明細資料的項次(原本沒這欄位與資料,
轉入資料後,以程式產生),再以”訂單編號 + 項次”當成主索引的鍵值。

二:
原來,我用TABLE.ADDINDEX方法要產生主索引時,沒有給它最後一個空字串
的參數,所以失敗了。


再次感謝版主大大
系統時間:2024-05-02 6:38:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!