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

PostgreSQLで学ぶリレーショナルデータモデルとその実装

 PostgreSQLで学ぶリレーショナルデータモデルとその実装

中国DB勉強会でのトーク資料です。

Avatar for Akira Suenami

Akira Suenami

May 01, 2016
Tweet

More Decks by Akira Suenami

Other Decks in Technology

Transcript

  1. ࣗݾ঺հ • ຤ฒ ߊʢ͑͢ͳΈ ͖͋Βʣ • @a_suenami • ޷͖ͳ΋ͷ͸ RDB

    ͱ͔ΦϒδΣΫτࢦ޲ͱ͔ TDD ͱ͔ɻ • ࠷ۙ͸౶࣭ܯ࡯ͱͯ͠׆ಈதɻ
  2. ຊൃදͷ໨త • PostgreSQL Λ͸͡Ίͱ͢ΔϦϨʔγϣφϧσʔλϕʔεʢ RDB ʣ ͷࠜװΛ੒͢ϦϨʔγϣφϧσʔλϞσϧʹ͍ͭͯཧղͯ͠΋Β͏ɻ • RDB ΍ͦΕʹର͢Δ໰͍߹Θͤݴޠͱͯ͠ͷ

    SQL ͸ϦϨʔγϣφϧ σʔλϞσϧΛϕʔεʹ͠ͳ͕Β΋ɺͦΕҎ্ʹศརʹ࢖͏ͨΊʹଟ ͘ͷ௥Ճ࣮૷͕͋Δ͜ͱΛཧղͯ͠΋Β͏ɻ • PostgreSQL ΛྫʹͱͬͯɺϦϨʔγϣφϧσʔλϞσϧ͓ΑͼͦΕ Ҏ֎ͷ࣮૷ʹ͍ͭͯ஌ͬͯ΋Β͏͜ͱɻ
  3. ϦϨʔγϣφϧσʔλϞσϧͷجૅ • ͋Δ෺ࣄʹؔ͢Δࣄ࣮ͷू߹ʢ=ϦϨʔγϣϯʣΛѻ͏σʔλϞσ ϧɻ • ϦϨʔγϣϯ ≠ ϦϨʔγϣϯγοϓ • ϦϨʔγϣϯʢؔ܎ʣͱ͸ɺRDB

    ʹ͓͚Δςʔϒϧؒͷؔ܎ʢࢀ রɺ֎෦ΩʔʣͰ͸ͳ͘ɺςʔϒϧ಺ͷΧϥϜؒͷؔ܎ɺͭ·Γςʔ ϒϧͦͷ΋ͷͷ͜ͱͰ͋Δɻ
  4. ೋ߲ؔ܎ͱड़ޠ࿦ཧͱϦϨʔγϣϯ • ͋Δ 2 ͭͷू߹ͷཁૉ x, y ͷ૊Έ߹Θ͕ͤ͋Δ৚݅ R Λຬͨ͢৔߹ɺʮx

    ͱ y ͸ R ͷؔ܎ʹ͋Δʯͱ͍͍ɺ͜ͷ૊Έ߹Θͤͷू߹Λೋ߲ؔ܎ͱ͍͏ɻ • ྫ: x + y = 3 ͱͳΔΑ͏ͳࣗવ਺ͷू߹ • (0, 3), (1, 2), (2, 1), (3, 0) • ϦϨʔγϣφϧσʔλϞσϧ͸͜ΕΛ n ߲ʹ֦ுͨ͠΋ͷͰ͋Δɻ • ͕ͨͬͯ͠ɺϦϨʔγϣϯͷ֤ཁૉ͸ n ࣍ݩ্ۭؒͷ͋Δ࠲ඪΛද͢͜ͱʹ ͳΔɻ • ॏෳ͸ͳ͍ɻ • ॱং΋ͳ͍ɻ
  5. ؔ܎ԋࢉ • ੍ݶʢ Restrict ʣ • ࣹӨʢ Project ʣ •

    ࿨ʢ Union ʣ • ੵʢ Intersect ʣ • ௚ੵʢ Product ʣ • ݁߹ʢ Join ʣ
  6. ੍ݶ ձһ൪߸ ੏ ໊ ೥ྸ  ຤ฒ ߊ  

    ࢁా ଠ࿠   ాத Ֆࢠ   ࠤ౻ ୓໵  ձһ൪߸ ੏ ໊ ೥ྸ  ຤ฒ ߊ   ࠤ౻ ୓໵ 
  7. ࣹӨ ձһ൪߸ ੏ ໊ ೥ྸ  ຤ฒ ߊ  

    ࢁా ଠ࿠   ాத Ֆࢠ   ࠤ౻ ୓໵  ձһ൪߸ ੏ ໊  ຤ฒ ߊ  ࢁా ଠ࿠  ాத Ֆࢠ  ࠤ౻ ୓໵
  8. ࿨ ձһ൪߸ ੏ ໊ ೥ྸ  ຤ฒ ߊ  

    ࢁా ଠ࿠   ాத Ֆࢠ   ࠤ౻ ୓໵  ձһ൪߸ ੏ ໊ ೥ྸ  ླ໦ Ұ࿠   ߴڮ ࿨ࢠ  ձһ൪߸ ੏ ໊ ೥ྸ  ຤ฒ ߊ   ࢁా ଠ࿠   ాத Ֆࢠ   ࠤ౻ ୓໵   ླ໦ Ұ࿠   ߴڮ ࿨ࢠ 
  9. ݁߹ ձһ൪߸ ੏ ໊ ೥ྸ ౎ಓ෎ݝ  ຤ฒ ߊ 

    େ෼  ࢁా ଠ࿠  ࢁޱ  ాத Ֆࢠ  ࢁޱ  ࠤ౻ ୓໵  ޿ౡ ౎ಓ෎ݝ ݝிॴࡏ஍ ๺ւಓ ࡳຈ   ࢁޱ ࢁޱ   େ෼ େ෼   ձһ൪߸ ੏ ໊ ೥ྸ ౎ಓ෎ݝ ݝிॴࡏ஍  ຤ฒ ߊ  େ෼ େ෼  ࢁా ଠ࿠  ࢁޱ ࢁޱ  ాத Ֆࢠ  ࢁޱ ࢁޱ  ࠤ౻ ୓໵  ޿ౡ ޿ౡ
  10. ੵ • ݁߹ͷಛघͳέʔεɻ • ͢΂ͯͷଐੑ͕׬શʹҰக͢Δ৔߹ɻ ੏ ໊ ຤ฒ ߊ ࢁా

    ଠ࿠ ాத Ֆࢠ ࠤ౻ ୓໵ ੏ ໊ ຤ฒ ߊ ాத Ֆࢠ ੏ ໊ ຤ฒ ߊ ాத Ֆࢠ
  11. ௚ੵ • ݁߹ͷಛघͳέʔεɻ • Ұக͢Δଐੑ͕ͻͱͭ΋ͳ͍৔߹ɻ ੏ ໊ ຤ฒ ߊ ࢁా

    ଠ࿠ εΩϧ 1PTUHSF42- .Z42- ੏ ໊ εΩϧ ຤ฒ ߊ 1PTUHSF42- ຤ฒ ߊ .Z42- ࢁా ଠ࿠ 1PTUHSF42- ࢁా ଠ࿠ .Z42-
  12. ༻ޠ঺հ • ީิΩʔ • ϦϨʔγϣϯͷཁૉΛҰҙʹಛఆͰ͖Δଐੑͷू߹ͰɺͦΕҎ্ཁૉΛݮΒ͢͜ͱ͕Ͱ ͖ͳ͍΋ͷɻ • εʔύʔΩʔ • ީิΩʔͷεʔύʔηοτɻ

    • ͢΂ͯͷଐੑΛؚΉू߹͸ৗʹεʔύʔΩʔͰ͋Δɻ • ؔ਺ैଐੑ • ϦϨʔγϣϯͷཁૉͷ͋Δଐੑ a ͕ఆ·ͬͨΒผͷଐੑ b ΋ఆ·Δ৔߹ɺb ͸ a ʹؔ਺ ैଐ͢Δͱ͍͏ɻ • ݁߹ैଐੑ • ςʔϒϧΛ݁߹ͨ͠৔߹ʹݩʹ໭ΔΑ͏ʹແଛࣦ෼ղͰ͖Δ͜ͱɻ
  13. ୈ̎ਖ਼نܗ • ީิΩʔͷҰ෦͔ΒඇΩʔଐੑ΁ͷؔ਺ैଐ͕ഉআ͞Εͨঢ়ଶɻ • ୯ҰଐੑͷީิΩʔ͔͠ଘࡏ͠ͳ͍৔߹ʹ͸ࣗಈతʹୈ2ਖ਼نܗͱ ͳΔɻ ੏ ໊ ೥ྸ ॻ੶

    ຤ฒ ߊ  σʔλϕʔε࣮ફೖ໳ ຤ฒ ߊ  42-Ξϯνύλʔϯ ຤ฒ ߊ  υϝΠϯۦಈઃܭ ࢁా ଠ࿠  σʔλϕʔε࣮ફೖ໳ ੏ ໊ ೥ྸ ຤ฒ ߊ  ࢁా ଠ࿠  ੏ ໊ ॻ੶ ຤ฒ ߊ σʔλϕʔε࣮ફೖ໳ ຤ฒ ߊ 42-Ξϯνύλʔϯ ຤ฒ ߊ υϝΠϯۦಈઃܭ ࢁా ଠ࿠ σʔλϕʔε࣮ફೖ໳
  14. ୈ̏ਖ਼نܗ • ඇΩʔଐੑͷਪҠؔ਺ैଐ͕ഉআ͞Εͨঢ়ଶɻ ੏ ໊ ೥ྸ ౎ಓ෎ݝ ݝிॴࡏ஍ ຤ฒ ߊ

     େ෼ େ෼ ࢁా ଠ࿠  ࢁޱ ࢁޱ ాத Ֆࢠ  ࢁޱ ࢁޱ ࠤ౻ ୓໵  ޿ౡ ޿ౡ ੏ ໊ ೥ྸ ౎ಓ෎ݝ ຤ฒ ߊ  େ෼ ࢁా ଠ࿠  ࢁޱ ాத Ֆࢠ  ࢁޱ ࠤ౻ ୓໵  ޿ౡ ౎ಓ෎ݝ ݝிॴࡏ஍ ๺ւಓ ࡳຈ   ࢁޱ ࢁޱ   େ෼ େ෼  
  15. ϘΠείουਖ਼نܗ • ඇΩʔଐੑ͔ΒީิΩʔʹର͢Δؔ਺ैଐੑΛഉআͨ͠΋ͷɻ • ΄ͱΜͲͷ৔߹ʹ͓͍ͯୈ̏ਖ਼نܗͱಉ͡ʹͳΔ͕ɺީิΩʔ͕ෳ ਺ଘࡏ͢Δ৔߹ʹ͸ୈ̏ਖ਼نܗͰ͸͋Δ͕ϘΠείουਖ਼نܗͰ͸ ͳ͍͜ͱ͕ى͜Γ͏Δɻ ੏ ໊ ϓϩδΣΫτ

    Ϛωʔδϟʔ ຤ฒ ߊ 999 ҏ౻ ຤ฒ ߊ ::: தଜ ࢁా ଠ࿠ 999 খྛ ࢁా ଠ࿠ ;;; ࢁຊ Ϛωʔδϟʔ ϓϩδΣΫτ ҏ౻ 999 தଜ ::: খྛ 999 ࢁຊ ;;; ੏ ໊ Ϛωʔδϟʔ ຤ฒ ߊ ҏ౻ ຤ฒ ߊ தଜ ࢁా ଠ࿠ খྛ ࢁా ଠ࿠ ࢁຊ
  16. ୈ4ਖ਼نܗ • Ұ෦ͷ݁߹ैଐੑʢଟ஋ैଐੑʣΛഉআͨ͠ঢ়ଶɻ • ୈ̐ਖ਼نܗͱୈ̑ਖ਼نܗ͸ީิΩʔͷΈͰߏ੒͞ΕΔϦϨʔγϣϯ ͷΈ͕ਖ਼نԽͷର৅ͱͳΔɻ ঎඼໊ ৭ αΠζ ϫϯϐʔε

    ന 4 ϫϯϐʔε ന . ϫϯϐʔε ϐϯΫ 4 ϫϯϐʔε ϐϯΫ . εΧʔτ ࠇ 4 εΧʔτ ࠇ . εΧʔτ ࠇ - εΧʔτ ന 4 εΧʔτ ന . εΧʔτ ന - ๧ࢠ ੨ . ঎඼໊ αΠζ ϫϯϐʔε 4 ϫϯϐʔε . εΧʔτ 4 εΧʔτ . εΧʔτ - ๧ࢠ . ঎඼໊ ৭ ϫϯϐʔε ന ϫϯϐʔε ϐϯΫ εΧʔτ ࠇ εΧʔτ ന ๧ࢠ ੨
  17. ΠϯσοΫε ͷ࣮૷ • B-Tree ΠϯσοΫε • B-Tree ߏ଄Λ࣋ͭ൚༻తʹ༻͍ΒΕΔΠϯσοΫεɻ • ϋογϡΠϯσοΫε

    • ΠϯσοΫεΛϋογϡςʔϒϧͰอ࣋͢Δɻ • ݱࡏ͸ඇਪ঑ɻ • GIN ΠϯσοΫε • શจݕࡧ༻్ʹ༻͍ΔΠϯσοΫεɻ • GiST ΠϯσοΫε • ۭؒ৘ใ޲͚ͷΠϯσοΫεɻ
  18. τϥϯβΫγϣϯ෼཭Ϩϕϧ • Read Uncommitted • τϥϯβΫγϣϯ෼཭Ϩϕϧ͕࠷΋௿͘ɺμʔςΟϦʔυʢଞͷτϥϯβΫγϣϯ ͕ॻ͖ࠐΜͰ·ͩίϛοτ͍ͯ͠ͳ͍σʔλΛಡΉʣ͕ൃੜ͢ΔՄೳੑ͕͋Δɻ • Read Committed

    • ଞͷτϥϯβΫγϣϯ͕ίϛοτͨ͠σʔλΛࢀর͢Δ͕൓෮ಡΈࠐΈͷՄೳੑ͸ ͋Δɻ • Repeatable Read • ಉҰτϥϯβΫγϣϯ಺ͰԿ౓ಉ͡σʔλΛࢀরͯ͠΋಺༰͸มΘΒͣɺ൓෮ಡΈ औΓʹରͯ҆͠શʹͳΔɻ • Serializable • τϥϯβΫγϣϯ͕௚ྻʹฒͼଞͷ͢΂ͯͷτϥϯβΫγϣϯ͔Β෼཭͞ΕΔɻ