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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 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 • τϥϯβΫγϣϯ͕௚ྻʹฒͼଞͷ͢΂ͯͷτϥϯβΫγϣϯ͔Β෼཭͞ΕΔɻ