9. 主キー,参照整合性制約,従属

133 Views

January 12, 22

スライド概要

(リレーショナルデータベースの基本)(全15回)
URL: https://www.kkaneko.jp/cc/ds/index.html

profile-image

金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko

シェア

埋め込む »CMSなどでJSが使えない場合

各ページのテキスト
1.

9. 主キー,参照整合性制約,従属 URL: https://www.kkaneko.jp/cc/ds/index.html 金子邦彦 謝辞:この資料では「いらすとや」のイラストを使用しています 1

2.

アウトライン 番号 項目 説明時間の 目安 9-1 従属 12分 9-2 Access を用いた従属に関する実演・実習 13分 9-3 主キー,参照整合性制約 5分 9-4 SQL での主キー,参照整合性制約 4分 9-5 Access を用いた参照整合性制約に関する 実演・実習 6分 2

3.

• 従属 ⇒ データベースのデータが冗長か を分析する手がかり • 従属の分析は、データベースの設計で大切 商品名 みかん みかん りんご メロン 単価 50 50 100 500 購入者 aa bb cc aa 「単価」は「商品名」に従属する 「商品名 → 単価」のように書く 3

4.

• 参照整合性制約 制約に反するデータを格納することはできない 4

5.

9-1. 従属 5

6.

従属 商品名 みかん みかん りんご メロン 単価 50 50 100 500 購入者 aa bb cc aa 「単価」は「商品名」に従属する 「商品名 → 単価」のように書く 「ある属性 X の値が1つに決まると,別の属性 Y の値が1つに決まる(属性 Y の値が複数になること はあり得ない)」とき、 属性 Y は 属性 X に従属(X → Y のように書く) 6

7.

従属の例 名前 A 昼食 そば 料金 250 B C D カレーライス 400 カレーライス 400 うどん 250 ①「昼食」は「名前」に従属する 「名前 → 昼食」のように書く 制約:それぞれの人は,昼食を1つしか食べない ②「料金」は「昼食」に従属する 「昼食 → 料金」のように書く 制約:それぞれの昼食の料金は1つ ③「料金」は「名前」に従属する 「名前 → 料金」のように書く 制約:それぞれの人の料金は1つ 7

8.

A そば B カレーライス 名前 昼食 C カレーライス D うどん それぞれの人は,昼食を1つしか食べない 8

9.

250 そば 昼食 400 料金 カレーライス 250 うどん それぞれの昼食の料金は1つ 9

10.

A 250 B 400 名前 料金 C 400 D 250 それぞれの人の料金は1つ 10

11.

9-2. Access を用いた従属に関 する実演・実習 11

12.

「商品」テーブルの従属 商品名 みかん みかん りんご メロン 単価 50 50 100 500 購入者 aa bb cc aa 商品名 → 単価 (「単価」は「商品名」に従属する) 商品名 単価 みかん 50 りんご 100 メロン 500 商品名、単価のみ を射影したテーブル (重複行除去) 商品名でグループを作ると、 行数(レコード数)はすべて1 12

13.

「商品」テーブルの従属 商品名 みかん みかん りんご メロン 単価 50 50 100 500 購入者 aa bb cc aa 単価と購入者は、従属にない 単価 購入者 50 aa 50 bb 100 cc 500 aa 単価、購入者のみ を射影したテーブル (重複行除去) 単価や購入者でグループを作っても、 「行数(レコード数)はすべて1」 とはならない 13

14.

実演・実習用のデータベースファイル • 実演・実習用の Access データベースファイル ※ セレッソの利用者は,セレッソからダウンロー ド可能 • 「コンテンツの有効化」のメッセージが出たとき は、確認のうえ、次にすすむ • つぎのような表示が出たときは、確認のうえ、 「はい」 14

15.

実演・実習用のデータベースファイル 商品テーブル 15

16.

SELECT DISTINCT 商品名, 単価 FROM 商品; 射影と重複行除去 商品名 みかん みかん りんご メロン 単価 50 50 100 500 購入者 aa bb cc aa 16

17.

SELECT 商品名, count(*) FROM (SELECT DISTINCT 商品名, 単価 FROM 商品) GROUP BY 商品名; グループ化して、行数をカウント 商品名 みかん みかん りんご メロン 単価 50 50 100 500 購入者 aa bb cc aa 17

18.

SELECT DISTINCT 単価, 購入者 FROM 商品; 射影と重複行除去 商品名 みかん みかん りんご メロン 単価 50 50 100 500 購入者 aa bb cc aa 18

19.

SELECT 単価, count(*) FROM (SELECT DISTINCT 単価, 購入者 FROM 商品) GROUP BY 単価; グループ化して、行数をカウント 商品名 みかん みかん りんご メロン 単価 50 50 100 500 購入者 aa bb cc aa 19

20.

SELECT 購入者, count(*) FROM (SELECT DISTINCT 単価, 購入者 FROM 商品) GROUP BY 購入者; グループ化して、行数をカウント 商品名 みかん みかん りんご メロン 単価 50 50 100 500 購入者 aa bb cc aa 20

21.

9-3. 主キー,参照整合性制約 21

22.

主キー 通し番号、学生番号のように、1つのテーブルの中で 同じ値が2回以上出ないと前もって分かっている属性 ID 1 2 3 名前 単価 みかん 50 りんご 100 りんご 150 主キー 22

23.

参照整合性制約のイメージ メニューから お選びください 枝豆はないんですか? あるテーブルのある属性に格納できるデータには制約がつく 場合がある 23

24.

参照整合性制約 参照整合性制約の DDDD 付いた属性 ◇ テーブル名:購入 ID 購入者 商品ID 数量 1 X 1 10 2 Y 2 5 ◇ テーブル名:メニュー 名前 単価 ID 1 みかん 50 2 りんご 100 テーブル「購入」の商品IDの値は、必ず、 3 りんご 150 テーブル「商品」のIDの中から選ぶ DDDD 参照整合性制約 DDDD 主キー 24

25.

参照整合性制約がどういう場合に役に立つか • 1対多,多対多の関連があるときは、複数のテー ブルを定義することが多い • それらテーブルの間には,参照整合性制約がある 25

26.

9-4. SQL での 主キー,参照整合性制約 26

27.

SQL のキーワード • テーブル定義 create table • 主キー primary key • 外部キー foreign key, references 27

28.

主キーと参照整合性制約の例 参照整合性制約の DDDD 付いた属性 ◇ テーブル名:購入 ID 購入者 商品ID 数量 1 X 1 10 2 Y 2 5 ◇ テーブル名:メニュー 名前 単価 ID 1 みかん 50 2 りんご 100 テーブル「購入」の商品IDの値は、必ず、 3 りんご 150 テーブル「商品」のIDの中から選ぶ DDDD 参照整合性制約 DDDD 主キー 28

29.

テーブル定義の例 ◇ テーブル名:購入 ID 購入者 商品ID 数量 1 X 1 10 2 Y 2 5 DDDD 主キー 参照整合性制約 DDDD ◇ テーブル名:メニュー 名前 単価 ID 1 みかん 50 2 りんご 100 3 りんご 150 DDDD 主キー create table 購入 ( ID integer primary key, 購入者 char, 商品ID integer, 数量 integer, foreign key(商品ID) references メニュー(ID)); create table メニュー ( ID integer primary key, 名前 char, 単価 integer); 29

30.

9-5. Access を用いた 主キー,参照整合性制約に 関する演習 30

31.

主キーと参照整合性制約の例 参照整合性制約の DDDD 付いた属性 ◇ テーブル名:購入 ID 購入者 商品ID 数量 1 X 1 10 2 Y 2 5 ◇ テーブル名:メニュー 名前 単価 ID 1 みかん 50 2 りんご 100 テーブル「購入」の商品IDの値は、必ず、 3 りんご 150 テーブル「商品」のIDの中から選ぶ DDDD 参照整合性制約 DDDD 主キー 31

32.

主キーのあるテーブル ◇ テーブル名:メニュー 名前 単価 ID 1 みかん 50 2 りんご 100 3 りんご 150 DDDD 主キー 主キーの「ID」でグループを作ると、 行数(レコード数)はすべて1 32

33.

SELECT ID, count(*) FROM メニュー GROUP BY ID; グループ化して、行数をカウント ID 1 2 3 名前 単価 みかん 50 りんご 100 りんご 150 33

34.

参照整合性制約の DDDD 付いた属性 ◇ テーブル名:購入 ID 購入者 商品ID 数量 1 X 1 10 ◇ テーブル名:メニュー 2 Y 2 5 名前 単価 ID 3 X 10 22 1 みかん 50 2 りんご 100 3 りんご 150 DDDDD 参照整合性制約 商品ID に「22」を入れることは、参照整合性制約に違反 34

35.

商品ID に「22」を入れることは、参照整合性制約に違反 35

36.

関連資料 • リレーショナルデータベース序論(全4回) 全体を知る. https://www.kkaneko.jp/cc/di/index.html • リレーショナルデータベースの基本(全15回) 基礎を学ぶ. https://www.kkaneko.jp/cc/ds/index.html • リレーショナルデータベース演習(全15回) 演習により修得する. https://www.kkaneko.jp/cc/de/index.html 36