MySQLテーブルの設計[概要]

1.テーブル設計の関係:

1. 1対1:データの一部は頻繁にアクセスされ、一部のデータはあまりアクセスされないため、2つのテーブルを作成できます。

  • 1対1とは:テーブルABが2つあり、テーブルAの1つのデータがテーブルBの1つのデータに対応し、テーブルBの1つのデータもテーブルAの1つのデータに対応しています。
  • アプリケーションシナリオ:ユーザーテーブルとユーザー情報拡張テーブル、製品テーブルと製品情報拡張テーブル、

外部キー:テーブルでリレーションシップを確立するために使用されるフィールドは、外部キーと呼ばれます。テーブルには複数の外部キーがありますが、主キーは1つだけです。

  • 関係が確立されている場合:外部キーをテーブルからメインテーブルの主キーに追加します。

例:ユーザーテーブルとuserinfoテーブルを作成します。ユーザーにユーザー名、パスワード、ニックネーム、年齢、住所、および性別のフィールドが含まれている場合。主キーIDを追加せずに、よく使用されるユーザー名とパスワードをユーザーテーブルに格納し、同時に副テーブルuserinfoを作成し、他のニックネーム、年齢などの情報を格納し、主テーブルの主キーIDに対応する外部キーユーザーIDを追加して、 1対1の関係を実現するために、ユーザーのuserinfoにクエリを実行する必要がある場合、対応するIDを使用して、テーブルの外部キーのユーザーIDからのクエリに一致させることができます。

2. 1対多: 2つのテーブルABがあり、テーブルAの1つのデータはテーブルBの複数のデータに対応し、テーブルBの1つのデータはテーブルAの1つのデータに対応します。

  • アプリケーションシナリオ:ユーザーテーブルと部門テーブル、製品テーブルと分類テーブル(カテゴリには多くの製品が含まれますが、製品は1つのカテゴリにしか所属できません)。
  • 関係を確立します。複数のセグメントに外部キーを追加し、別のテーブルの主キーをポイントします。

例:empテーブルとdeptテーブルの作成:たとえば、dept部門テーブルを作成し、主キーIDを追加しました。2つの部門があり、1つは技術部門ID = 1、もう1つは設計部門がid = 2に対応しています。この時点で、別のempテーブルを作成します。そして、メインテーブルdeptの主キーIDに対応する外部キーdeptid = 1を追加します。たとえば、Xiao Zhang deptid = 1、Xiao Li deptid = 1、Xiao Wang deptid = 2、Xiao Zhao deptid = 2これをdeptテーブルに渡します主キーIDは1で、テーブルemp内の対応するdeptidから一致する1を見つけます。XiaoZhangとXiao Liの2人が見つかり、1対多を実現します。メインテーブルdeptはスレーブテーブルempに対応します複数のデータ。

3.多対多: 2つのテーブルABがあり、テーブルAの1つのデータはテーブルBの複数のデータに対応し、テーブルBの1つのデータはテーブルAの複数のデータに対応します。

  • アプリケーションシナリオ:教師テーブルと生徒テーブル、ユーザーテーブルと役割テーブル、役割テーブルと権限テーブル、
  • リレーションシップを確立します。3番目のリレーションシップテーブルを介して2つのメインテーブル間のリレーションシップを保存します。3番目のリレーションシップテーブルは2つのメインテーブルの主キーを記録します。

例:教師テーブル、生徒テーブル、および関係テーブルを作成します。

create table teacher(id int primary key auto_increment,name varchar(10));
create table student(id int primary key auto_increment,name varchar(10));
create table t_s(tid int,sid int);

各生徒の名前と対応する教師の名前をクエリします。

select s.name,t.name from t_s ts join teacher t on ts.tid = t.id join student s on ts.sid = s.id;

李先生の生徒は誰ですか:

select s.name,t.name from t_s ts join teacher t on ts.tid = t.id join student s on ts.sid = s.id where t.name = '李老师';

Xiaoliの先生を確認してください:

select s.name,t.name from t_s ts join teacher t on ts.tid = t.id join student s on ts.sid = s.id where s.name = '小丽';

4.自己関連付け:外部キーを現在のテーブルに追加し、外部キーの値が現在のテーブルの主キーを指すこの関連付け方法は自己関連付けと呼ばれます。

  • アプリケーションシナリオ:ユーザーテーブルで、一部のユーザーには上位のリーダーがいる場合とない場合があります。現時点では、上位のリーダーの主キーIDに外部キーを追加できます。

例:個人テーブルを作成し、主キーID、名前、マネージャーリーダーが主キーIDを指す

create table person(id int primary key auto_increment,name varchar(10),mgr int);

次のデータを保存します。効果は次のとおりです。

insert into person values(null,'如来',null),(null,'唐僧',1),(null,'悟空',2),(null,'猴孙',3);

ここに画像の説明を挿入
各人の名前と上司の名前をクエリします。

select p.name,p2.name as 上级	 from person p left join person p2 on p.mgr = p2.id; 

ここに画像の説明を挿入
5.テーブル設計ケース:権限管理

  • 実装方法:権限管理機能を実現するためには、メインテーブル3つとリレーショナルテーブル2つを用意する必要があります。
  • アプリケーションシナリオ:
    • メインテーブル:ユーザーテーブル、ロールテーブル、ロール許可テーブル
    • 関係テーブル:ユーザーとロール間の対応、およびロールとロール権限間の対応

演習:テーブルを作成します。

create table user(id int primary key auto_increment,name varchar(10));
create table role(id int primary key auto_increment,name varchar(10));
create table module(id int primary key auto_increment,name varchar(10));
create table u_r(uid int,rid int);
create table r_m(rid int,mid int);

データを挿入:

insert into user values(1,'刘德华'),(2,'凤姐');
insert into role values(1,'男游客'),(2,'男会员'),(3,'女游客'),(4,'女管理员'); 
insert into module values(1,'男浏览'),(2,'男发帖'),(3,'女浏览'),(4,'女发帖'),(5,'女删帖');

ユーザーと役割の関係を保存します。AndyLau:男性のメンバーと女性の観光客Sister Feng:女性の管理者と男性の観光客:

insert into u_r values(1,2),(1,3),(2,1),(2,4);

役割と権限を保存します。

insert into r_m values(1,1),(2,1),(2,2),(3,3),(4,3),(4,4),(4,5);

各ユーザーの権限は何ですか?

select u.name 名字,m.name 权限 from user u join u_r on u.id = ur.id join r_m rm on ur.rid = rm.rid join module m on rm.mid = m.id;

Sister Fengの権限を照会します。

select u.name 名字,m.name 权限 from user u join u_r ur on u.id=ur.uid join r_m rm on rm.rid=ur.rid join module m on rm.mid=m.id where u.name='凤姐';

男性のプレビュー権限を持つクエリ:

select m.name 权限,u.name 预览 from user u join u_r ur on u.id=ur.uid join r_m rm on ur.rid=rm.rid join module m on m.id=rm.mid where m.name in('男浏览','女浏览');

おすすめ

転載: blog.csdn.net/weixin_44296929/article/details/108659615