一、問題:
在業務中遇到這樣的情況 :我有兩張無關表student和course。
student表中的字段是 stu_id 和stu_name。如圖:
course表中的字段是cour_id和cour_name。如圖:
我想要查詢某個同學選了哪些課和某門課被哪些同學選了。這是資料庫中典型的多對多的問題,
二、解決:
此時應當形成第三張關聯表。這裡三張表的字元編碼應該相同。
create table stu_cour(
sc_id int primary key auto_increment,
stu_name varchar(10),
cour_name varchar(20)
)charset utf8;
這裡需要給第三張表新增約束條件。關於約束條件參照:
我們要用的是多對多的關係。對我們這個案例來說,就是要給stu_cour表新增外來鍵約束條件
alter table stu_cour add constraint stu_fk1 foreign key (stu_name)
references student (stu_name);
即stu_cour表中的stu_name受student中的stu_name的約束。但是這裡會報錯:
查詢得知:外來鍵表和主鍵表中的資料型別要一致,另外,主鍵表中被外來鍵引用的資料列要設為unique才行。
我們表中被引用的資料型別都一樣,都是varchar,因此大概率就是第二個原因了。
student中的stu_name被stu_cour引用了,因此把student中的stu_name改為unique
即:
alter table student modify stu_name varchar(10) not null unique;
這裡再次執行:
alter table stu_cour add constraint stu_fk1 foreign key (stu_name)
references student (stu_name);
已經ok了,course處理方式同理,切記,這裡三張表的字元編碼應該相同
讓我們愉快地來測試一下吧。
student表:
course表:
stu_cour表:這裡無需輸入stu_name和cour_name,可以在表student和表course中選擇
查詢誰都選了高等數學:
select * from stu_cour where cour_name='高等數學';
再查詢一下,宋同學選了哪些課。
select * from stu_cour where stu_name='宋xx';
ok,解決了。
資料庫表多對多的設計
先上問題!現在有a b c三張表,a和b是一對多的關係,b和c是一對一的關係,c和b是一對多的關係,a和c是多對多的關係。問題 是否設計第四張表專門存放a b c的關係,還是把關係維護在b表中?原則 首先在資料庫中不建議建立三維關係。其實就是說一張表 關係表 不要維繫三個模型的的關係 設計思路er圖...
資料庫中的多對多的查詢
使用mybatis的問題呢,就得自己寫sql,當然使用mybatis generator 也能生成一部分,但一些就得自己寫。使用hibernate 與jpa 就很少需要寫了。不過不太靈活,比較繁瑣。可能只需要乙個簡單的sql語句就解決的問題就需要配置兩個物件之間的關聯關係,這個關聯關係在一些情況下不...
flask 定義資料庫關係(多對多)
多對多 我們使用學生和老師來演示多對多關係 每個學生有多個老師,每個老師有多個學生。多對多關係示意圖如下 在例項程式中,student類表示學生,teacher類表示老師。在這兩個模型之間建立多對多關係後,我們需要在student類中新增乙個集合關係屬性teachers,呼叫它可以獲取某個學生的多個...