Upgrade to Pro — share decks privately, control downloads, hide ads and more …

データベース02: データベースの概念

データベース02: データベースの概念

1. データベースとは
2. データのモデリング

講義ノートURL
https://dbnote.hontolab.org/content/concept-of-database/01.html

Y. Yamamoto

April 22, 2024
Tweet

More Decks by Y. Yamamoto

Other Decks in Technology

Transcript

  1. データベースの定義 データベース • データの正しさを管理する主体によって体系的に整理さ れ,計算機によって永続的に格納されたデータの集まり データベース管理システム(DBMS) • 上記データベースを扱うためのシステム • DBMS

    + DB = データベースシステム(DBS) • 複数の応⽤⽬的での共有を意図して,組織的にかつ 永続的に格納されたデータ群 ⼤量に発⽣する多様なデータを処理するにはDBが必要
  2. 要件1 (= 前提): 多様かつ⼤規模なデータの管理 取引ID 顧客ID 品目 単価 数 A001

    c001 鶏玉丼 440 1 A002 c001 はーいお茶 120 2 A003 c003 ポテト 1 1 取引ID 顧客ID 品目 単価 数 A001 c001 鶏玉丼 440 1 A002 c001 はーいお茶 120 2 A003 c003 ポテト 1 1 X57925 x67b2 きのこの里 200 3 取引ID 顧客ID 品目 単価 数 A001 c001 鶏玉丼 440 1 A002 c001 はーいお茶 120 2 A003 c003 ポテト 1 1 X57925 x67b2 きのこの里 200 3 取引ID 顧客ID 品目 単価 数 A001 c001 鶏玉丼 440 1 A002 c001 はーいお茶 120 2 A003 c003 ポテト 1 1 X57925 x67b2 きのこの里 200 3 取引ID 顧客ID 品目 単価 数 A001 c001 鶏玉丼 440 1 A002 c001 はーいお茶 120 2 A003 c003 ポテト 1 1 X57925 x67b2 きのこの里 200 3 取引ID 顧客ID 品目 単価 数 A001 c001 鶏玉丼 440 1 A002 c001 はーいお茶 120 2 A003 c003 ポテト 1 1 X57925 x67b2 きのこの里 200 3 … 数百万⾏レベルに & 表の数も増えると… 多種多様なデータが大量に発生する現場 2020年にAmazon.co.jpで販売された商品数は5億点以上 表計算ソフトの限界 多様かつ⼤規模なデータをExcelで複数⼈で管理すると破綻する
  3. 要件2: データの正しさの保証 データの正しさ,データ間の矛盾のなさを保証 購買ID 購買日 品名 売り上げ(円) 1123 2019/10/05 コーヒー

    350 1124 2019/10/06 ホットミルク 300円 1125 2019年10月7日 野菜ジュース 100 1126 2019/10/08 コーヒー 3百万円 存在しない商品 の取引がある 値がおかしくないか 別表にあるデータと整合しているか? ありえない金額 が入力されている 日付の入力形式 が異なる
  4. 要件3: ⾼速で効率的なデータ処理 データベースへの大量の問い合わせに対して できるだけ短時間で結果を返す 商品ID 名称 単価 登録日 AB0023 鶏玉丼

    440 2010/07/15 AC0027 はーいお茶 130 2010/09/25 AD0002 ポテト 150 2011/10/02 QR1127 きのこの里 200 2023/04/01 … 100万⾏ある表データ 要領が悪すぎ (最悪100万回) ある商品IDの⾏を 先頭から順に調べる =
  5. Q2: 線形探索 商品ID 名称 単価 登録日 AB0023 鶏玉丼 440 2010/07/15

    AC0027 はーいお茶 130 2010/09/25 AD0002 ポテト 150 2011/10/02 QR1127 きのこの里 200 2023/04/01 … 順番に 調べると… どこに正解があるかはランダム(等確率)と仮定すると, 100万 1 ×1回 + 100万 1 ×2回 + … + 100万 1 × 100万回 = 100万 1 2 100万 100万1 × = 約50万回 先頭から 1つ⽬で当たり 先頭から 2つ⽬で当たり
  6. 同時・並列処理がうまくできないと困るケース Xさんの⼝座 Aさんが10万円を 振り込む処理 「振込先⼝座」残⾼ 100万円 振込⾦額 10万円 計算 100万円

    + 10万円 110 万円 ? 処理 「振込先⼝座」残⾼ 100万円 振込⾦額 10万円 計算 100万円 + 10万円 110 万円 100 万円 Bさんが10万円を 振り込む処理 何がマズかったのか?
  7. データベースの本質: データの独⽴化 アプリA プログラム コード データファイル アプリB プログラム コード アプリC

    プログラム コード プログラム コード プログラム コード プログラム コード データベースシステム アプリA アプリB アプリC 問い合わせ 問い合わせ データ処理 部分 データ処理 部分 データ処理 部分 データベース(実際のデータ集合) データベース管理システム データベースを使う場合 データベースを使わない場合 データベースはデータとアプリを切り離す データの処理や管理を⼀元化(⼀⼿に引き受ける)することで アプリケーションやデータ分析のコードから冗⻑な箇所を排除
  8. Q4: CSV/TSVファイル 商品ID 名称 単価 AB0023 鶏玉丼 440 AC0027 はーいお茶

    130 AD0002 ポテト 150 商品ID , 名称 , 単価 AB0023 , 鶏⽟丼 , 440 AC0027 , はーいお茶 , 130 AD0002 , ポテト , 150 商品ID<tab>名称<tab>単価 AB0023<tab>鶏⽟丼<tab> 440 AC0027<tab>はーいお茶<tab>130 AD0002<tab>ポテト<tab> 150 CSVファイル TSVファイル • 表の⾏をファイル中の1⾏, • 表の列をカンマ区切り • 表の⾏をファイル中の1⾏ • 表の列をTAB⽂字区切り で表現するテキストファイル で表現するテキストファイル CSV/TSVファイルともに表データの配布に⽤いられる
  9. CSV/TSVファイルの⽋点 列の要素にカンマが⼊るデータがあると表構造が崩れる (TSVファイルのデータ要素にTAB⽂字が含まれる可能性は低い) CSVファイル固有の問題 データの型を規定できない 共通の問題 書籍ID , 名称 AB0023

    , データベース AC0027 , 海辺のカフカ , 130 AD0002 , Data, information, & Knowledge 書籍ID 名称 AB0023 データベース AC0027 海辺のカフカ AD0002 Data Information & Knowledge これがまずい
  10. 関係データモデルの例 学生ID 姓 名 入学年 所属 s00001 川澄 桜 2023

    A学部 s00002 山畑 滝子 2024 B学部 s00003 田辺 通 2024 C学部 科目ID 科目名 開講年度 c0001 線形代数 2023 c0002 線形代数 2024 c0003 統計学入門 2024 科目ID 学生ID 成績 c0001 s00001 不可 c0002 s00001 良 c0002 s00002 優 c0003 s00003 可 学⽣ 科⽬ 履修 … … … 制約を考慮してデータを複数の表に分割し格納 この4種類しか 値は取れない
  11. 回 実施日 トピック 1 04/15 ガイダンス:データベースを使わない世界 2 04/22 データベースの概念 3

    04/29(祝) 関係データモデル 4 05/13 SQL (1/3) 5 05/20 SQL (2/3) 6 05/27 SQL (3/3) 7 06/03 SQL演習 – レポート課題1 8 06/10 実体関連モデル (1/3) 9 06/17 実体関連モデル (2/3) 10 06/24 実体関連モデル (3/3) 11 07/01 正規化 (1/2) 12 07/08 正規化 (2/2) 13 07/15(祝) データベース設計演習 – レポート課題2 14 07/22 索引付け 15 07/29 NoSQL 16 08/05 期末試験 今後の予定 40