##マルチテーブルとの間の関係
-1-オン(理解)
*のような:人やIDカード
*分析に:人は一人だけにのみIDカード、IDカード対応です。
図2に示すように、多くの(多くの)
*のような:部門と従業員
*分析:部門は唯一の部門に複数の従業員の対応のスタッフがいます。
3、多くの
*のような:学生とコース
*分析:多くの学生が自分のコースを選択することができ、コースはまた、多くの学生の選択することができます。
実現関係
1対多(多くの)
*のような:部門と従業員
*実装:マルチパーティの外部キー、主キーへのポイントの一つを確立します。
2、多くの
*のような:部門と従業員
*方法:少なくとも二つのフィールドを含む第3の中間テーブルを用いて、二つの主要なテーブルのそれぞれの主キーの外部キーなどの2つのフィールドを第3のテーブル。
3、一対一
* のような:人やIDカード
*実装:あなたは外部キーを追加することができますが、他の1で一意の主キーを参照します。
ケース:
/*旅游线路案例 1、分类表和线路表是1 对 多的关系 2、线路表和用户表是多对多,需要创建中间表。 */ create table category( cid int primary key auto_increment, name varchar(64) not null unique ); create table routes( rid int primary key auto_increment, name varchar(128) not null unique , price double, cid int, /*constraint rou_cat_fk */foreign key (cid) references category(cid) on delete cascade on update cascade ); create table user( uid int primary key auto_increment, username varchar(32) not null unique , password varchar(32) not null ); create table favorite( rid int, date datetime, uid int, /*创建复合主键*/ primary key (rid,uid), foreign key (rid) references routes(rid), foreign key (uid) references user(uid) ); insert into category(cid, name) VALUES (1,'国外游'),(2,'国内游'); insert into routes(rid, name, price, cid) VALUES (1,'希腊游',10000.1,1),(2,'北京游',9992.1,2); insert into user (uid, username, password) values (null,'ftj','123'),(null,'lxy','456'); insert into favorite (rid, date, uid) values (1,'2020-02-08 23:59:59',1),(2,'2020-02-08 23:59:59',2); select * from user where uid = (select uid from favorite where rid = 1);