iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 25
1
自我挑戰組

毫無基礎學習 Ruby on Rails 的 甘苦心得系列 第 25

DAY 25 資料庫( SQL ) 建立表格 欄位介紹

  • 分享至 

  • xImage
  •  

表格是資料庫中儲存資料的基本架構。在絕大部份的情況下,資料庫廠商不可能知道您需要如何儲存您的 資料,所以通常您會需要自己在資料庫中建立表格。雖然許多資料庫工具可以讓您在不需用到 SQL 的情況下 建立表格,不過由於表格是一個最基本的架構

在建立 CREATE TABLE 的語法之前,我們最好先對表格這個東西 有些多一點的瞭解。表格被分為欄位 (column) 及列位 (row)。每一列代表一筆資料,而每一欄代表一筆資料的 一部份。舉例來說,如果我們有一個記載顧客資料的表格,那欄位就有可能包括姓、名、地址、城市、國家、 生日‧‧‧等等。當我們對表格下定義時,我們需要註明欄位的標題,以及那個欄位的資料種類。

那,資料種類是什麼呢?資料可能是以許多不同的形式存在的。它可能是一個整數 (例如 1),、一個浮點數 (例如 0.55)、一個字串 (例如 'sql')、一個日期/時間 (例如 '2019-JAN-25 03:22:22')、或甚至是 以二進法 (binary) 的狀態存在。當我們在對一個表格下定義時,我們需要對每一個欄位的資料種類下定義。 (例如 '姓' 這個欄位的資料種類是 char(50)──代表這是一個 50 個字元的字串)。我們需要注意的一點是 不同的資料庫有不同的資料種類,所以在對表格做出定義之前最好先參考一下資料庫本身的說明。

CREATE TABLE 的語法是:

CREATE TABLE "表格名"("欄位 1" "欄位 1 資料種類" , "欄位 2" "欄位 2 資料種類" ,... );

如果是以上面的例子會變成

CREATE TABLE Customer(First_Name char(50),Last_Name char(50),Address char(50),City char(50),Country char(25),Birth_Date datetime);

我們可以限制哪一些資料可以存入表格中。這些限制可以在表格初創時藉由 CREATE TABLE 語句來指定,或是之後藉由 ALTER TABLE 語句來指定。

常見的限制有以下幾種:

NOT NULL
UNIQUE
CHECK
主鑑 (Primary Key)
外來鑑 (Foreign Key)

NOT NULL

在沒有做出任何限制的情況下,一個欄位是允許有 NULL 值得。如果我們不允許一個欄位含有 NULL 值,我們就需要對那個欄位做出 NOT NULL 的指定。

舉例來說,在以下的語句中

CREATE TABLE Customer
(SID integer NOT NULL,
 Last_Name varchar (30) NOT NULL,
 First_Name varchar(30));

"SID" 和 "Last_Name" 這兩個欄位是不允許有 NULL 值,而 "First_Name" 這個欄位是可以有 NULL 值得。

UNIQUE

UNIQUE 限制是保證一個欄位中的所有資料都是有不一樣的值。

舉例來說,在以下的語句中,

CREATE TABLE Customer
(SID integer UNIQUE,
 Last_Name varchar (30),
 First_Name varchar(30));

"SID" 欄位不能有重複值存在,而 "Last_Name" 及 "First_Name" 這兩個欄位則是允許有重複值存在。

請注意,一個被指定為主鑑的欄位也一定會含有 UNIQUE 的特性。相對來說,一個 UNIQUE 的欄位並不一定會是一個主鍵。

CHECK

CHECK 限制是保證一個欄位中的所有資料都是符合某些條件。

舉例來說,在以下的語句中

CREATE TABLE Customer
(SID integer CHECK (SID > 0),
Last_Name varchar (30),
First_Name varchar(30));

"SID" 攔只能包含大於 0 的整數。

請注意,CHECK 限制目前尚未被執行於 MySQL 資料庫上。

主鍵 (Primary Key)

主鍵每一筆資料都是表格中的唯一值。換言之,它是用來獨一無二地確認一個表格中的每一行資料。主鍵可以是原本資料內的一個欄位,或是一個人造欄位 (與原本資料沒有關係的欄位)。主鍵可以包含一或多個欄位。當主鍵包含多個欄位時,稱為組合鍵 (Composite Key)。

主鍵可以在建置新表格時設定 (運用 CREATE TABLE 語句),或是以改變現有的表格架構方式設定 (運用 ALTER TABLE 語句)。

以下舉幾個在建置新表格時設定主鍵的方式:

MySQL:

CREATE TABLE Customer
(SID integer,
Last_Name varchar(30),
First_Name varchar(30),
PRIMARY KEY (SID));

PRIMARY KEY (SID)這段就是指定 SID 為主鍵

改變現有表格架構來設定主鍵的方式:

MySQL:

ALTER TABLE Customer ADD PRIMARY KEY (SID);

重點:
用 ALTER TABLE 語句來添加主鍵之前,我們需要確認被用來當做主鍵的欄位是設定為 『NOT NULL』 ;也就是說,那個欄位一定不能沒有資料。

外來鍵(foreign key)

外來鍵是一個(或數個)指向另外一個表格主鍵的欄位。外來鍵的目的是確定資料的參考完整性 (Referential Integrity)。換言之,只有被准許的資料值才會被存入資料庫內。

舉例來說,假設我們有兩個表格:一個 CUSTOMER 表格,裡面記錄了所有顧客的資料;另一個 ORDERS 表格,裡面記錄了所有顧客訂購的資料。在這裡的一個限制,就是所有的訂購資料中的顧客,都一定是要跟在 CUSTOMER 表格中存在。在這裡,我們就會在 ORDERS 表格中設定一個外來鍵,而這個外來鍵是指向 CUSTOMER 表格中的主鍵。這樣一來,我們就可以確定所有在 ORDERS 表格中的顧客都存在 CUSTOMER 表格中。換句話說,ORDERS 表格之中,不能有任何顧客是不存在於 CUSTOMER 表格中的資料。

這兩個表格的結構將會是如下:

https://ithelp.ithome.com.tw/upload/images/20191009/20118842Dhfw5ONgd0.png

https://ithelp.ithome.com.tw/upload/images/20191009/20118842wq9be8D4ZF.png

在以上的例子中,ORDERS 表格中的 Customer_SID 欄位是一個指向 CUSTOMER 表格中 SID 欄位的外來鍵。

在建置 ORDERS 表格時指定外來鍵的方式:

MySQL:

CREATE TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
PRIMARY KEY (Order_ID),
FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID));

以下的例子則是藉著改變表格架構來指定外來鍵。這裡假設 ORDERS 表格已經被建置,而外來鍵尚未被指定:

MySQL:

ALTER TABLE ORDERS
ADD FOREIGN KEY (Customer_SID) REFERENCES CUSTOMER (SID);

參考資料:

SQL 語法


上一篇
DAY 24 資料庫(SQL) ORM
下一篇
DAY 26 Rails Validators / 回呼Callback
系列文
毫無基礎學習 Ruby on Rails 的 甘苦心得30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言