在資料庫中,將實體與實體的關係反應到表的設計上來,可以細分為 3 種,分別為:一對一(1:1)
,一對多(1:n)
(或多對一(n:1)
)和多對多(n:n)
。
在此,所有的關係都是指表與表之間的關係。
一對一,即一張表的一條記錄只能與另外一張表的一條記錄相對應,反之亦然。
例如,咱們設計一張「個人資訊表」,其欄位包含:姓名、性別、年齡、身高、體重、籍貫和居住地等。
id姓名
性別年齡
身高體重
籍貫居住地
1charies男18
18275
中國北京
2swift女18
17250
美國紐約
如上表所示,基本滿足咱們的要求,其中姓名、性別和年齡屬於常用資料,但是身高、體重、籍貫和居住地為不常用資料。如果每次查詢都要查詢所有資料的話,那麼不常用資料就會影響效率,而且又不常用。因此,咱們可以將常用的資料和不常用的資料分離儲存,即分為兩張表,例如:
表 1:常用資料
id姓名
性別年齡
1charies男18
2swift女18
表 2:不常用資料
id身高
體重籍貫
居住地1
18275
中國北京
2172
50美國
紐約如上面表1
和表2
所示,通過字段id
,表1
中的一條記錄只能匹配表2
中的一條記錄,反之亦然,這就是一對一
的關係。
一對多,即一張表中的記錄可以對應另外一張表中的多條記錄,但是反過來,另外一張表中的一條記錄只能對應第一張表中的一條記錄。
例如,咱們設計「國家城市表」,其包含兩個實體,即國家和城市。
表 3:國家表
country_id
國家位置1中國
亞洲2美國北美洲
3俄羅斯
亞洲和歐洲
表 4:城市表
city_id
城市國家1北京
中國2深圳中國3紐約
美國4莫斯科俄羅斯
如上面表3
和表4
所示,通過字段國家
,表3
中的一條記錄可以匹配表4
中的多條記錄,但反過來,表4
中的一條記錄只能匹配表3
中的一條記錄,這就是典型的一對多
的關係。
多對多,即一張表中的記錄可以對應另外一張表中的多條記錄,反過來,另外一張表中的一條記錄也可以對應第一張表中的多條記錄。
例如,咱們設計「教師學生表」,其包含兩個實體,即教師和學生。
表 5:教師表
tea_id
姓名性別1劉濤
女2劉亦菲女
3劉德華
男表 6:學生表
stu_id
姓名性別1齊嶽
男2杜康男
觀察上面的表5
和表6
,咱們會發現:表5
和表6
的設計滿足了實體的屬性,但沒有維護實體之間的關係,即乙個老師教過多個學生,乙個學生也被多個老師教過。但是無論咱們在表5
中還是在表6
中增加字段,都會出現乙個問題,那就是:該字段要儲存多個資料,並且還是與其他表有關係的字段,不符合設計規範。因此,咱們可以再設計一張「中間表」,專門用來維護表5
和表6
的關係。
表 7:中間表
idtea_id
stu_id11
1212
3214
32觀察上面的表5
、表6
和表7
,咱們會發現增加表7
之後,咱們維護表5
和表6
的關係更加方便啦!無論是想從表5
通過表7
查到表6
,還是想從表6
通過表7
查到表5
,都非常容易啦!這就是典型的多對多
的關係。
史上最簡單的 MySQL 教程(十八) 關係
在資料庫中,將實體與實體的關係反應到表的設計上來,可以細分為 3 種,分別為 一對一 1 1 一對多 1 n 或多對一 n 1 和多對多 n n 在此,所有的關係都是指表與表之間的關係。一對一,即一張表的一條記錄只能與另外一張表的一條記錄相對應,反之亦然。例如,咱們設計一張 個人資訊表 其欄位包含 ...
史上最簡單的 MySQL 教程(十七) 索引
索引 系統根據某種演算法,將已有的資料 未來可能新增的資料 單獨建立乙個檔案,這個檔案能夠實現快速匹配資料,並且能夠快速的找到對應的記錄,幾乎所有的索引都是建立在字段之上的。索引的意義 但是增加索引是有前提條件的,這是因為索引本身會產生索引檔案 有的時候可能會比資料本身都大 因此非常耗費磁碟空間。m...
史上最簡單的 MySQL 教程(三十七)
基礎概念 為什麼要進行資料的備份與還原?資料備份與還原的方式有很多種,具體可以分為 資料表備份 單錶資料備份 sql備份和增量備份。sql 備份,備份的是 sql 語句。在進行 sql 備份的時候,系統會對錶結構以及資料進行處理,變成相應的 sql 語句,然後執行備份。在還原的時候,只要執行備份的 ...