SQL 關係模型

2021-09-18 07:51:46 字數 2146 閱讀 6663

主鍵是關係表中記錄的唯一標識。

主鍵的選取:主鍵不要帶有業務含義,而應該使用bigint自增或者guid型別。主鍵也不應該允許null

idclass_id

name

other columns…11

小明…21

小紅…52

小白…在students表中,通過class_id的字段,可以把資料與另一張表關聯起來,這種列稱為外來鍵

外來鍵並不是通過列名實現的,而是通過定義外來鍵約束實現的:

alter table students

add constraint fk_class_id

foreign key (class_id)

references classes (id);

其中,外來鍵約束的名稱fk_class_id可以任意,foreign key (class_id)指定了class_id作為外來鍵,references classes (id)指定了這個外來鍵將關聯到classes表的id列(即classes表的主鍵)。

通過定義外來鍵約束,關聯式資料庫可以保證無法插入無效的資料。即如果classes表不存在id=99的記錄,students表就無法插入class_id=99的記錄。

由於外來鍵約束會降低資料庫的效能,大部分網際網路應用程式為了追求速度,並不設定外來鍵約束,而是僅靠應用程式自身來保證邏輯的正確性。這種情況下,class_id僅僅是乙個普通的列,只是它起到了外來鍵的作用而已。

要刪除乙個外來鍵約束,也是通過alter table實現的:

alter table students

drop foreign key fk_class_id;

注意:刪除外來鍵約束並沒有刪除外來鍵這一列。刪除列是通過drop column ...實現的。

經常根據score列進行查詢,就可以對score列建立索引:

alter table students

add index idx_score (score);

使用add index idx_score (score)就建立了乙個名稱為idx_score,使用列score的索引。索引名稱是任意的,索引如果有多列,可以在括號裡依次寫上,例如:

alter table students

add index idx_name_score (name, score);

3.1 唯一索引

在設計關係資料表的時候,看上去唯一的列,例如身份證號、郵箱位址等,因為他們具有業務含義,因此不宜作為主鍵。

但是,這些列根據業務要求,又具有唯一性約束:即不能出現兩條記錄儲存了同乙個身份證號。這個時候,就可以給該列新增乙個唯一索引。例如,我們假設students表的name不能重複:

alter table students

add unique index uni_name (name);

通過unique關鍵字我們就新增了乙個唯一索引。

也可以只對某一列新增乙個唯一約束而不建立唯一索引:

alter table students

add constraint uni_name unique (name);

這種情況下,name列沒有索引,但仍然具有唯一性保證。

無論是否建立索引,對於使用者和應用程式來說,使用關聯式資料庫不會有任何區別。這裡的意思是說,當我們在資料庫中查詢時,如果有相應的索引可用,資料庫系統就會自動使用索引來提高查詢效率,如果沒有索引,查詢也能正常執行,只是速度會變慢。因此,索引可以在使用資料庫的過程中逐步優化。

關係模型和SQL

為了介紹關係模型,以mysql資料庫為例.安裝mariadb sql是結構化查詢語言structured query language.1987年被iso組織標準化.所有主流的關係型資料庫都支援sql,nosql也有很大一部分支援sql.sql語句分為 語言規範 sql語句大小寫不敏感 sql語句末...

SQL基礎 關係模型 主鍵

描述 能通過某個字段唯一區分出不同的記錄,這個欄位被成為主鍵 特性 a.主鍵必須包含唯一的值 b.主鍵列不能包含null值 c.每個表都應該有乙個主鍵,並且每個表只能有乙個主鍵 選取主鍵的基本原則 不使用任何業務相關的字段作為主鍵 身份證號 手機號 郵箱位址均不可用作主鍵 作為主鍵最好是完全與業務無...

SQL筆記02 關係模型

學習sql關係模型並總結,廖雪峰教程 表和表之間應該建立 一對多 多對一 的關係 int自增型別,記錄數最多21億,bigint自增型別最多922億億 mysql alter table students add constraint fk class id foreign key class id...