天天看點

達夢資料庫基礎---表

表是資料庫中資料存儲的基本單元,是對使用者資料進行讀和操縱的邏輯實體。表由列和行組成,每一行代表一個單獨的記錄。表中包含一組固定的列,表中的列描述該表所跟蹤的實體的屬性,每個列都有一個名字及各自的特性。

列的特性由兩部分組成:資料類型(dataType)和長度(length)。對于 NUMERIC、DECIMAL 以及那些包含秒的時間間隔類型來說,可以指定列的小數位及精度特性。在DM 系統中,CHAR、CHARACTER、VARCHAR 資料類型的最大長度由資料庫頁面大小決定,資料庫頁面大小在初始化資料庫時指定。DM 系統具有 SQL-92 的絕大部分資料類型,以及部分SQL-99、Oracle 和 SQL Server 的資料類型。

為了確定資料庫中資料的一緻性和完整性,在建立表時可以定義表的實體完整性、域完整性和參考完整性。實體完整性定義表中的所有行能唯一地辨別,一般用主鍵、唯一索引、UNIQUE 關鍵字及 IDENTITY 屬性來定義;域完整性通常指資料的有效性,限制資料類型、預設值、規則、限制、是否可以為空等條件,域完整性可以確定不會輸入無效的值;參考完整性維護表間資料的有效性、完整性,通常通過建立外鍵聯系另一表的主鍵來實作。

如果使用者在建立表時沒有定義表的完整性和一緻性限制條件,那麼使用者可以利用 DM 所提供的基表修改語句來進行補充或修改。DM 系統提供基表修改語句,可對基表的結構進行全面的修改,包括修改基表名、列名、增加列、删除列、修改列類型、增加表級限制、除表級限制、設定列預設值、設定觸發器狀态等一系列修改功能。

1.管理表的準則

1.1 設計表

表是資料庫設計過程中的基本構件,基于來自應用開發者的有關應用如何運作和所期望的資料類型,資料庫管理者應與應用開發者一起工作,并認真規劃每個表,具體需要做到以下幾點:

  1. 規範化表,估算并校正表結構,使資料備援達到最小;
  2. 為每個列選擇合适的資料類型,是否允許為空等,并根據實際情況判斷是否需要對列進行加密或壓縮處理;
  3. 建立合适的完整性限制。
  4. 建立合适的聚集索引。每個表(列存儲表,堆表除外)都含一個聚集索引,預設以ROWID 建立,而建立合适的聚集索引,可以有效加快表的檢索效率;
  5. 根據實際需要,建立合适類型的表。DM 支援的表類型包括普通表、臨時表、水準分區表、垂直分區表、堆表和列存儲表。

1.2 指定表的存儲空間上限

在建立表時指定 SPACE LIMIT 子句,可以對表的存儲空間指定上限。DM 支援對表的存儲空間指定大小,機關是 MB,即表的大小可由管理者指定,便于表的規模管理。當表的所有索引所占用的存儲空間超過指定大小時,表将不能再新增資料。

1.3 指定表的存儲位置

建立表時,在 STORAGE 子句中,可對表指定存儲的表空間。如果沒有指定,則該表将建立在使用者的預設表空間中。在建立表時,通過指定合适的表空間,有以下優點:

  1. 提高資料庫系統的性能,因為不同的資料庫表可能對應不同的資料檔案,可減少對相同檔案的競争;
  2. 減少資料庫管理的時間,資料庫表分布在不同的表空間中,即使一個表空間損壞,也不影響其他表空間上資料庫表的正常通路。

2 建立表

2.1 普通表示例

如果要在所屬模式中建立新表,需要有 CREATE TABLE 資料庫權限;而要在其他使用者的模式中建立新表,則需要有 CREATE ANY TABLE 資料庫權限。建立表時,應當為表指定一個表空間,否則,表将在 MAIN 建立。下面給出一個建立一個簡單表的例子。

例1:

CREATE TABLE EMPLOYEE (
EMPNO INT PRIMARY KEY,
ENAME VARCHAR(15) NOT NULL,
JOB VARCHAR(10),
MGR INT
CONSTRAINT EMP_FKEY REFERENCES EMPLOYEE(EMPNO),
HIREDATE DATE DEFAULT (CURDATE),
SALARY FLOAT,
DEPTNO TINYINT NOT NULL
CONSTRAINT DEPT_FKEY REFERENCES DEPT(DEPTNO))
STORAGE (
INITIAL 50,
NEXT 50,
MINEXTENTS 10,
FILLFACTOR 80,
ON USERS);
           

例2:

CREATE TABLE PRODUCTION.PRODUCT_REVIEW
(
PRODUCT_REVIEWID INT IDENTITY(1,1),
PRODUCTID INT NOT NULL,
NAME VARCHAR(50) NOT NULL,
REVIEWDATE DATE NOT NULL,
EMAIL VARCHAR(50) NOT NULL,
RATING INT NOT NULL,
COMMENTS TEXT,
PRIMARY KEY(PRODUCT_REVIEWID),
FOREIGN KEY(PRODUCTID) REFERENCES PRODUCTION.PRODUCT(PRODUCTID),
CHECK(RATING IN(1,2,3,4,5))
);
           

繼續閱讀