達夢資料庫基礎---表

一蓑煙雨任平生、、發表於2020-11-25

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

列的特性由兩部分組成:資料型別(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. 建立合適的完整性約束,管理約束可檢視 15 章管理完整性約束的內容;
  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))
);

相關文章