天天看點

OushuDB 建立和管理表的基本結構之表的基本概念

OushuDB 建立和管理表的基本結構之表的基本概念

關系型資料庫中的表非常類似紙面上的一張表:它由行和列組成。列的數目和順序是固定的,每個列都有一個名字。行的數目是變化的(它反映了給定時刻存儲的資料量)。SQL 對表中行的順序沒有任何規定。當讀取一個表時,行将會以一個随機的順序出現,除非你明确地要求排序。另外,SQL 并不給行賦予唯一的辨別,是以我們很可能在一個表中有好幾個完全相同的行。這是作為 SQL 基礎的下層數學模型的必然結果,但是這通常是我們不願意看到的。

每個列都指定一個資料類型。資料類型限制着一個列所有可能值的集合,并且限制着列中資料的語義,這樣它就可以用于計算。比如,一個聲明為數值類型的列不會接受任意文本字元串,而存儲在這種列裡的資料可以用于數學計算。相比之下,一個聲明為字元串類型的列接受幾乎任意類型的資料,但是它們不能進行數學計算(不過可以進行像字元串連接配接之類的操作)。

OushuDB包含一套可觀的内置資料類型,這些類型可以适用于許多應用。使用者也可以定義它們自己的資料類型。大多數内置的資料類型有顯而易見的名字和語義。常用的資料類型有:用于整數的integer、用于可能為分數的numeric、用于字元串的text、用于日期的date、用于時間的time、用于時間戳的timestamp。

要建立一個表,可使用CREATE TABLE指令。在這個指令裡,你至少要為新表聲明一個名字,還有各列的名字以及其資料類型。比如:

CREATE TABLE my_first_table (first_column text,second_column integer);           

這樣就建立了一個有兩個列的名為my_first_table的Append-Only表。第一個列的名字是first_column,資料類型為text;第二個列的名字是second_column,資料類型是integer。表和列的名字遵循 

http://www.oushu.com/docs/ch/sql_syntax.html#id2

 裡面解釋的辨別符文法。

建立ORC格式表的文法如下:

CREATE TABLE my_first_table (first_column text,second_column integer) WITH (APPENDONLY = true, OIDS = FALSE, ORIENTATION = orc);           

建立MAGMA格式表的文法如下(MAGMA表在建立時可以聲明主鍵,且主鍵必須為表級限制,而且如果主鍵限制的列中包含變長列,此列需放置最後一列聲明):

CREATE TABLE my_first_table (second_column integer,first_column text,primary key (second_column)) FORMAT 'MAGMAAP';           

建立PARQUET格式表的文法如下:

CREATE TABLE my_first_table (first_column text,second_column integer) with (appendonly=true, orientation=parquet);           

當然,前面隻是非常虛構的例子。通常,你會給表和列取有意義的名字,用以表達他們存儲什麼類型的資料,是以還是讓我們給一個比較現實的例子:

CREATE TABLE products (product_no integer,name text,price numeric);           

numeric類型可以存儲分數部分,金額很可能有這樣的分數部分。

提示:

如果你建立了許多互相關聯的表,那麼最好為表和列選擇一緻的命名模式。比如,表名字可以統一選擇單數或者複數。

一個表能包含的列數目是有限制的。根據列類型的不同,這個數目可能在 250 到 1600 之間。不過,不管是哪一個數目, 你設計的表包含這麼多的列的情況好像都很不可能發生,否則就是設計上有問題的表現。

如果你不再需要一個表,那麼可以用DROP TABLE指令删除它。像這樣:

DROP TABLE my_first_table;DROP TABLE products;           

試圖删除一個不存在的表是一個錯誤。不過,在 SQL 腳本檔案裡,我們通常在建立表之前無條件删除它并忽略錯誤消息,是以無論要删除的表存不存在,這個腳本都成功。當然你還可以使用DROP TABLE IF EXISTS來避免錯誤消息,不過這并不符合 SQL 标準。

使用以上文法,我們可以建立功能完整的表。本章剩下的部分是有關向表定義中增加特性、保證資料完整性、安全性或便利性的内容。