數據轉換沖突及處理
數據轉換沖突:
在數據轉換過程中,要想實現嚴格的等價轉換是比較困難的。必須要確定兩種模型中所存在的各種語法和語義上的沖突,這些沖突可能包括:
(1)命名沖突:源數據源的標識符可能是目的數據源中的保留字。
(2)格式沖突:同一種數據類型可能有不同的表示方法和語義差異。
(3)結構沖突:如果兩種DBMS之間的數據定義模型不同,如為關系模型和層次模型,則需要重新定義實體屬性和聯系,以防止屬性或聯系信息的丟失。
(4)類型沖突:不同數據庫的同一種數據類型存在精度之間的差異。
(5)其他沖突:不同數據庫的大對象類型存在不同的約束,而且存在一些特殊類型。如SQL SERVER中一個表中有多於一個TEXT或IMAGE的字段時,出現錯誤。而ORACLE也不允許一個表中的BLOB和LONG類型多於一個。
沖突處理方法:
對於以上數據轉換中的沖突,可進行相應的沖突處理。
對於命名沖突,可以先檢查數據源中的保留字,建立保留字集合,對於保留字中的命名沖突,根據需要重新命名。
對於格式沖突,可以根據ODBC SQL類型從數據源的驅動程序中取出相對應的數據源的數據類型後,對一些特定的類型進行特殊的處理。對於字符型數據中含有“’”字符的情況,在數據轉換過程中需通過轉義符作特殊處理,否則會把它誤當作字符串分隔符。
對於不同數據庫的同一數據類型的精度沖突,類型轉換中將ODBC SQL類型和精度結合起來決定源數據類型和目標數據類型的映射關系。找出目的數據源中與源數據源類型的精度最匹配的數據類型作為缺省的映射關系。
轉換過程中的數據類型匹配,日期型數據最好先轉換成字符型,然後根據不同的目標數據源分別作不同的處理。如ORACLE中使用TO_DATE函數,而FOXPRO中使用CTOD函數將日期格式的字符串轉換成日期。
對於SQL SERVER中的TEXT、IMAGE類型,在進行轉換時需要做出選擇,或者把TEXT鏡像為VARchar2(4000),或者鏡像為LONG 類型,但Long 類型一個表裡只能有一個。對於ORACLE,TEXT類型可以映像為CLOB類型,而IMAGE可以鏡像為BLOB。CLOB類型可以在一個ORACLE表裡有多列。
讀取數據源的元數據
數據源的元數據類型
元數據種類 元數據信息 用途
數據源連接信息 數據庫名,驅動器, 用於連接源數據源和目的數據源
服務器,DSN名,
數據源描述,用戶名等
表信息 表名,表屬主, 用於數據轉換中創建表
表模式,表類型
列信息 列名,類型,寬度, 用於數據轉換中表的創建以及列映射
精度,標度,是否為空
類型信息 類型名,最大列寬度, 用於數據轉換中表的創建以及類型映射
最大最小標度,
前後綴字符,
是否接受空,
關鍵字列表
鍵信息 主鍵名,主鍵列, 用於數據轉換中表模式的轉換
外鍵名,外鍵列,
外鍵關聯列
其它對象信息:索引信息,存儲過程信息,權限信息等 用於數據轉換中數據庫對象的轉換。