学习了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的队员。
这样添加队员也方便,检索队员数据也方便。比分这样写是字符串形式,还需要解析,也可以列成两列,直接存成数。