學習了SQL基本語法后,應該好好研究下數據庫表的設計。
- 建幾個表?
- 表的主鍵外鍵怎么設計?
比如:對于一個球賽管理系統,有單打和雙打。對于雙打,每倆個隊員都能組合,所以隊員之間的相關性很強。
如果只設計一個表,隊員名字字段下直接存比分,則呈現如下情況:
隊員1 | 隊員2 | 隊員3 | 隊員4 | ... | 比賽時間 |
---|---|---|---|---|---|
21 | 15 | 1-1 | |||
13 | 21 | 21 | 13 | 1-2 | |
16 | 21 | 1-3 | |||
┇ | ┇ | ┇ | ┇ | ┇ | ┇ |
表中第二行和第四行示范單打,第三行示范雙打。
這思路簡單,但是想要添加隊員麻煩且增加一個隊員就要增加一個字段,也就是一列。這樣隊員一多很不科學。
更合理的做法應該是:
- 隊員信息建一個表。
用戶id(主鍵) | 隊員名字 | 其他信息... |
---|---|---|
1 | playerA | ... |
2 | playerB | ... |
┇ | ┇ | ┇ |
- 比賽成績建一個表(單打和雙打分開和一起都行,下面演示合一起的示例)
比賽記錄id(主鍵) | 甲方隊員1 | 甲方隊員2 | 乙方隊員1 | 乙方隊員2 | 比分 | 比賽時間 |
---|---|---|---|---|---|---|
1 | 1 | 2 | 21:15 | |||
2 | 3 | 4 | 5 | 9 | 18:21 | |
┇ | ┇ | ┇ | ┇ | ┇ | ┇ | ┇ |
其中,甲乙方隊員字段下存的是隊員編號,均是隊員信息表中主鍵的外鍵,也就是設置4個外鍵。
表中第一行示范單打,用戶id為1的隊員和為2的隊員單打。
第二行示范雙打,用戶id為3和4的隊員對陣用戶id為5和9的隊員。
這樣添加隊員也方便,檢索隊員數據也方便。比分這樣寫是字符串形式,還需要解析,也可以列成兩列,直接存成數。