12 MySQL 設計資料表
前面小節介紹瞭如何新建資料庫和選擇資料庫,還介紹了 MySQL 的儲存資料型別,本小節學習如何設計學生課程相關資料表,其中包括學生資訊 student,教師資訊表 teacher,學科表 course,學生選課表 student_course,這一小節的主要目的是為了學習如何新建資料表,合理選擇欄位型別。
一個數據表主要包含資訊有 : 表名、主鍵、欄位、資料型別、索引,本節主要介紹表的命名規範、欄位命名、欄位的資料型別選擇。
本節內容新建的表都是新建在 “item_name” 資料庫中的,新建 “item_name” 資料庫命令如下 :
CREATE DATABASE item_name;
新建資料庫之後選擇資料庫:
USE item_name;
你也可以自行新建一個數據庫,自己命名就好。
1. 資料表命名規範
資料表命名是小寫字母和下劃線 _
組成,用來分割不同單詞之間的含義,例如 “student_course” 表示學生選課關聯表,實際命名需要根據具體功能而定,好的命名規範在實際工作中也是很重要的。
2. 新建學生資訊表 student
2.1 確定欄位
欄位名稱 | 含義 |
---|---|
id | 自增主鍵 |
name | 學生姓名 |
age | 學生年齡 |
id_number | 身份證號 |
學生資訊表包含的欄位可以有很多,本小節選擇學生姓名、年齡、身份證號介紹欄位的選擇,欄位的確定是根據實際業務需求來新增或減少的,例如想要儲存學生籍貫資訊可新增 “address” 欄位。
2.2 選擇欄位的資料型別
欄位名稱 | 資料型別 |
---|---|
id | 無符號整型(UNSIGNED INT) |
name | VARCHAR(50) |
age | UNSIGNED INT |
id_number | VARCHAR(18) |
Tips:實際業務中一般要將年齡欄位設定為可變,通常會使用時間戳(距離1970-01-01 00:00:00的秒數)來表示年齡相關的資訊,在這裡為了方便演示直接使用了 UNSIGNED INT。
一般來說姓名欄位的長度為 2-4 個字元,但是考慮到少數民族的學生姓名比較長,所以將姓名欄位的長度設定為 50,適當的給的大一點。身份證號同樣使用字串型別來儲存,因為有的身份證號中有字母。身份證的長度統一都是 18 位不變,直接在這裡寫死就好。
2.3 新建資料表
命令 :
CREATE TABLE `student` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '無名',
`age` int(10) UNSIGNED NOT NULL DEFAULT 0,
`id_number` varchar(18) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
);
Tips:其中 “student” 為表名稱,“id”、“name”、“age”、“id_number” 為欄位名稱,跟在欄位名稱後面的是欄位的資料型別,“UNSIGNED” 表示無符號,“AUTO_INCREMENT” 表示自增,"PRIMARY KEY (`id`)"表示設定 “id” 為業務主鍵,,"NOT NULL DEFAULT ‘無名’ " 表示預設不為空,且預設值為 “無名” 。
執行結果如下圖:
檢視當前資料庫中所有的資料表:
命令:show tables
可以看到 item_name 資料庫中已經有了 student 這張資料表。
3.新建教師資訊表 teacher
3.1 確定欄位
欄位名稱 | 含義 |
---|---|
id | 自增主鍵 |
name | 教師姓名 |
age | 教師年齡 |
id_number | 身份證號 |
同樣教師資訊的欄位可選擇也很多,這裡選擇教師姓名、教師年齡、教師身份證號,可自行選擇感興趣的欄位,並參照新建學生表的步驟選擇欄位,如教師郵箱、教師部落格地址。
3.2 選擇欄位的資料型別
欄位名稱 | 資料型別 |
---|---|
id | 無符號整型(UNSIGNED INT) |
name | VARCHAR(50) |
age | UNSIGNED INT |
id_number | VARCHAR(18) |
3.3 新建資料表
命令 :
CREATE TABLE `teacher` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '教師名',
`age` int(10) UNSIGNED NOT NULL DEFAULT 0,
`id_number` varchar(18) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
);
Tips: 其中 “teacher” 為表名稱,“id”、“name”、“age”、“id_number” 為欄位名稱,跟在欄位名稱後面的是欄位的資料型別,“UNSIGNED” 表示無符號,“AUTO_INCREMENT” 表示自增,“PRIMARY KEY (`id`)” 表示設定 “id” 為業務主鍵,"NOT NULL DEFAULT 教師名’ "表示預設不為空,且預設值為 “教師名” 。
執行結果如下圖:
Tips: 這裡展示了使用 Navicat 來執行 sql 語句,選擇資料庫只需點選相應的資料庫名稱,然後選擇新建查詢即可。
4.新建課程表 course
4.1 確定欄位
欄位名稱 | 含義 |
---|---|
id | 自增主鍵 |
course_name | 課程名稱 |
teacher_id | 教師id |
4.2 選擇欄位的資料型別
欄位名稱 | 資料型別 |
---|---|
id | 無符號整型(UNSIGNED INT) |
course_name | VARCHAR(50) |
teacher_id | 無符號整型(UNSIGNED INT) |
4.3 新建資料表
命令 :
CREATE TABLE `course` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`course_name` varchar(50) NOT NULL DEFAULT '',
`teacher_id` int(10) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
);
執行結果如下圖:
5.新建學生選課關聯表 student_course
5.1 確定欄位
欄位名稱 | 含義 |
---|---|
id | 自增主鍵 |
student_id | 學生id |
course_id | 課程id |
5.2 選擇欄位的資料型別
欄位名稱 | 資料型別 |
---|---|
id | 無符號整型(UNSIGNED INT) |
student_id | 無符號整型(UNSIGNED INT) |
course_id | 無符號整型(UNSIGNED INT) |
5.3 新建資料表
命令 :
CREATE TABLE `student_course` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`student_id` int(10) UNSIGNED NOT NULL DEFAULT 0,
`course_id` int(10) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
);
執行結果如下圖:
6.小結
本節介紹瞭如何新建學生選課相關資料表,熟悉如何合理選擇欄位資料型別,需要注意的是每一張表都必須有一個主鍵,一般建議選定為無符號整型 id 作為主鍵,並且 id 一般作為主鍵一般設定為自增的(特殊情況可使用其他非自增 id 作為主鍵),實際業務中資料庫優化第一步即為合理的設計資料表,其中選擇合適的資料型別顯得尤為重要。