程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# 操作 XML 數據庫類型、Oracle XMLType(3)

C# 操作 XML 數據庫類型、Oracle XMLType(3)

編輯:關於C語言

2.2 創建表

CREATE TABLE XML_USER_INFO (
 NPK integer,
 USER_NAME NVARCHAR2(50),
 Phones XMLType,
 primary key (NPK)
)
XMLTYPE COLUMN Phones STORE AS OBJECT RELATIONAL          --以對象關系方式建立,而不是二進制
XMLSCHEMA "http://www.OracleDemo.com/Phones.xsd"
ELEMENT "Phones"
VARRAY Phones.XMLDATA."Phone" STORE AS TABLE XML_USER_INFO_XMLNT01 --將xml中 Phones/Phone 定義為一個數組嵌套表
/
-- 返回:成功
-- 這時 Oracle 還會建立一個 XML_USER_INFO_XMLNT01 的【嵌套表】

我建立了一個叫 XML_USER_INFO 的表,這個東西假設為一個用戶信息表(真正的用戶信息不可能這麼少列的)

Oracle 建立XMLType 時可以指定以二進制或對象關系方式建立XML 類型,

我這裡選擇STORE AS OBJECT RELATIONAL 據說可以提高性能,等待考證

下一面我要給 Phones/Phone 下加一些約束所以將 Phone 定義為一個數組嵌套表;說白了就是定義一個表裡面都放置 Phone 類型

2.3 定義約束

ALTER TABLE XML_USER_INFO_XMLNT01
ADD constraint PK_XML_USER_INFO_XMLNT01 primary key (NESTED_TABLE_ID, "Code")

就是每個人的電話號碼不能重復; 數據庫裡的東西要是沒有約束是很郁悶的,這裡也試驗一下這個問題;

constraint PK_XML_USER_INFO_XMLNT01 可以省略,因為有名字比較容易從異常中看出到底是什麼列出錯,我一般都會加上這個

除非一個表就一個主鍵;

遺憾的是集合類型的元素、不能加外鍵(就是說如果是 Phones 的屬性是可以加外鍵的 Phone屬性,如電話號碼,類型什麼的就不行,必須和數據庫表一行能對應上的才可以加外鍵否則只能用 schema 約束);

外鍵的例子以後在說吧;

2.4 本步驟總結

比較滿意、雖然sql 代碼很多不過,schema 是類生成的、能夠節省一些設計時間,不過學習成本是必須的;

XMLType 的 schema 並不是必須的,不過沒有約束,關系對數據庫來說,時間長了是不好維護的尤其是後來人;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved