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

データベース・リファクタリングを読む / hello-database-refactoring

Avatar for hideki kinjyo hideki kinjyo
September 27, 2021

データベース・リファクタリングを読む / hello-database-refactoring

社内勉強会での発表ネタです

Avatar for hideki kinjyo

hideki kinjyo

September 27, 2021
Tweet

More Decks by hideki kinjyo

Other Decks in Programming

Transcript

  1. ͍ͭ΋ͷ • ۚ৓लथ / ͖Μ͡ΐ͏ͻͰ͖ • GitHub: @o0h / Twitter:

    @o0h_ • ޷͖ͳFW͸CakePHP • ΞΠίϯ͸
 ඒຯ͍͠ࡪ਌ࢠကͷࣸਅͰ͢
  2. ༗໊ͳຊ • (ୈ1൛ͷ)೔ຊޠ൛෭୊ɿʮϓϩάϥϜͷମ࣭վળςΫχοΫʯ • ϦϑΝΫλʹ͍ͭͯͷʮݪଇʯʮख๏ʯ΍ɺʮෆ٢ͳष͍ʯʹ͍ͭͯ ·ͱΊͨຊ • ݸਓతʹ͸ʮϓϩάϥϚͷΩϟϦΞͷૣ͍ஈ֊Ͱग़ձ͓ͬͯ͘΂͖ ຊʯͷ1ͭͩͱࢥ͏ •

    “GoFͷσβΠϯύλʔϯ͸෼ੳ͔ΒઃܭʹҠΔࡍͷ೰Έʹ͍ͭͯɺ໰ ୊ʹର͢Δղܾࡦͱͯ͠ಓےΛࣔ͠·͢ɻҰํϦϑΝΫλϦϯά͸ɺ ࣮૷ʹஔ͍ͯઃܭΛ;Γ͔͑ΓɺطଘͷػೳΛอͪͭͭίʔυΛΑΓ Α͍ઃܭ΁ͱਐԽ͍ͤͯ͘͞खॱΛड़΂ͨ΋ͷͰ͢”(ϦϑΝΫλϦϯ ά ୈ2൛ ༁ऀ͋ͱ͕͖)
  3. ϦϑΝΫλϦϯάͱύϑΥʔϚϯενϡʔχϯά • ϦϑΝΫλϦϯά͸ʮઃܭΛ੔͑ΔʯʮՄಡੑΛ޲্ͤ͞ΔʯͨΊͷΞΫςΟϏςΟ • ಉ༷ʹʮϓϩάϥϜͷશମతͳػೳΛมߋ͠ͳ͍मਖ਼ʯͱͯ͠ɺύϑΥʔϚϯεɾνϡʔ χϯά͕ڍ͛ΒΕΔ • ྆ऀͷҧ͍͸ɺͦͷ໨తʹ͋Δ • ՄಡੑͱύϑΥʔϚϯε͸ɺ࣌ʹτϨʔυΦϑʹͳΔՄೳੑ΋͋Δ

    • ଎౓޲্ʹॏ͖Λ͓͍͍ͯΔͳΒɺͦΕ͸(ϦϑΝΫλͱ͍͏ΑΓ)ύϑΥʔϚϯεɾ νϡʔχϯάͱݺ͹ΕΔ • (ݸਓతʹ͸ɺ͜ͷลΓ΋ؚΊͯਖ਼͍͠ޠኮΛ࢖ͬͨํ͕ଞਓͱͷίϛϡχέʔγϣ ϯ͕εϜʔζʹͳͬͯྑ͍ͷͰͳ͍ʁͱ͍͏ؾ࣋ͪ͸͋Δ
  4. ϦϑΝΫλϦϯάͷਐΊํ • ʮ(طଘͷ)ৼΔ෣͍Λอͭʯ͜ͱ͕େલఏ • ͭ·Γʮ࡞ۀͷલޙͰػೳ͕ఀࢭ͠ͳ͍ʯ͜ͱ͕ඞਢ • ʮ։ൃࡁΈʯͷ΋ͷΛʮ։ൃ్தʯʹ͢Δࣄ͸ڐ͞Εͳ͍ • খ͞ͳεςοϓΛੵΈॏͶ͍ͯ͘ͷ͕๬·͍͠ •

    ςετͷमਖ਼ΛߦΘͳ͍(SUTͷվमͷΈ)Λߦ͏ • ςετ͕มԽ͢Δ = ৼΔ෣͍͕มߋ͞Ε͍ͯΔ͜ͱΛ൱ఆͰ͖ͳ͍ • ͨͩ͠ɺʮςετ࿙ΕʯΛิॆ͢Δ৔߹͸ྫ֎
  5. ྫ͑͹ɺͱ͋ΔΞϯνύλʔϯ͕͋Γ SQLΞϯνύλʔϯ: ʮIDϦΫϫΠΞυ(ͱΓ͋͑ͣID)ʯ • ʮԿͰ΋͔ΜͰ΋ʮidʯͱ͍͏ओΩʔΛஔ͚͹ྑ͍༁͡Όͳ͍ͧʂʯ ͱ͍͏”ष͍” • ղܾࡦ • Θ͔Γ΍͍͢ྻ໊ʹ͠Α͏

    • ن໿ʹറΒΕͳ͍ • ࣗવΩʔͱෳ߹Ωʔͷ׆༻ • ʮ໰୊(Why)ʯʹରͯ͠ɺʮ͜͏͍͏෩ʹ͠Α͏(What)ʯ͸ѻΘΕ͍ͯ Δ͕ʮͲ͏΍ͬͯ҆શʹมߋΛ࣮ࢪ͢Δʁ(How)ʯ·Ͱ͸ѻ͍ͬͯͳ͍
  6. ྫ͑͹ɺͱ͋ΔΞϯνύλʔϯ͕͋Γ ϦϑΝΫλϦϯά: ʮࣗવΩʔʹΑΔ୅ཧΩʔͷஔ͖׵͑ʯ εΩʔϚߋ৽खॱ 1. ৽͍͠ओΩʔͱͳΔΧϥϜ Λಛఆ͢Δ 2. ৽͍͠ΠϯσοΫεΛ௥ Ճ͢Δ

    3. ݩͷΧϥϜΛഇࢭ༧ఆʹ͢ Δ 4. ؔ࿈͢ΔςʔϒϧΛߋ৽͢ Δ 5. ࢀর੔߹ੑτϦΨʔΛߋ ৽΋͘͠͸௥Ճ͢Δ ϓϩάϥϜߋ৽खॱ 1. ୅ཧΩʔΛ࢖͍ͬͯΔ ίʔυΛ࡟আ͢Δ 2. ৽͍͠ΩʔΛݩʹ݁߹ Λߦ͏ 3. ৽͍͠ΩʔΛݩʹσʔ λऔಘΛߦ͏
  7. σʔλϕʔεͷෆ٢ͳष͍ “σʔλϕʔεʹ΋ɺϦϑΝΫλϦϯάͷඞཁੑΛײͤ͡͞Δෆ٢ͳष͍͕͋Δ” 㱻 σʔλϕʔε΋ʮ࢖͍΍͍͢ʯʮಡΈ΍͍͢ʯඞཁ͕͋ΔΑʂ 1. ෳ਺ͷ໨తʹ࢖ΘΕΔΧϥϜ 2. ෳ਺ͷ໨తʹ࢖ΘΕΔςʔϒϧ 3. ৑௕ͳσʔλ

    4. ΧϥϜͷଟ͗͢Δςʔϒϧ 5. ߦͷଟ͗͢Δςʔϒϧ 6. ʮεϚʔτʯΧϥϜ 7. มߋͷڪා ڽूੑ੹຿ Մಡੑ ύϑΥʔϚϯε Өڹൣғґଘ ࢀߟ: DataBase Refactoring(soudai sone)
 https://speakerdeck.com/soudai/database-refactoring?slide=19
  8. σʔλϕʔεɾϦϑΝΫλϦϯάઓུ • খ͍͞มߋͷ΄͏͕ߦ͍΍͍͢ • ݸʑͷϦϑΝΫλϦϯάΛҰҙʹ ࣝผ͢Δ • େ͖ͳมߋΛଟ͘ͷখ͞ͳมߋʹ ෼͚࣮ͯࢪ͢Δ •

    σʔλϕʔεߏ੒ςʔϒϧΛ࡞੒͢ Δ • Ϗϡʔ΍όονಉظΑΓ΋τϦ ΨʔΛ࢖͏ • े෼ͳҠߦظؒΛઃఆ͢Δ • σʔλϕʔεΞΫηεΛΧϓηϧԽ ͢Δ • SQLΛॏෳͤ͞ͳ͍ • (શ෦Ͱ13ݸͷڭ܇͕ࡌ͍ͬͯΔΑ)
  9. ϦϑΝΫλ࣌ͷҠߦରԠ • ॏཁͳͷ͸ʮޓ׵ੑͷҡ࣋ʯͱʮҠߦظؒͷӡ༻ʯ • ൚༻తͳޓ׵ੑҡ࣋ͷͨΊͷख๏ • ΧϥϜ໊ͷมߋ΍ܭࢉϑΟʔϧυͷ௥Ճʹରͯ͠τϦΨʔͷ࡞੒ • ςʔϒϧͷมߋʹରͯ͠Ϗϡʔͷ࡞੒ •

    ੍໿ɾσϑΥ஋ͷஈ֊తಋೖ • Ҡߦظؒͷӡ༻ • ຊॻͰ͸ʮdeprecatedΛΧϥϜͷίϝϯτʹ࢒͢ʯʮτϦΨʔΛ༻͍ͨޓ׵ ੑͷҡ࣋ʯͳͲͷख๏Λపఈతʹར༻͍ͯ͠Δ
  10. ߏ଄ϦϑΝΫλϦϯά(ୈ6ষ) • ΧϥϜͷ࡟আ • ςʔϒϧͷ࡟আ • ΧϥϜͷ౷߹ • ςʔϒϧͷ౷߹ •

    ΧϥϜ໊ͷมߋ • ςʔϒϧ໊ͷมߋ • ςʔϒϧͷ෼ׂ • ΧϥϜͷ෼ׂ • ࣗવΩʔ / ୅ཧΩʔͷಋೖ • ؔ࿈ςʔϒϧʹΑΔ1ରଟ ؔ܎ͷஔ͖׵͑ • શ෦Ͱ17ݸ
  11. σʔλ඼࣭ϦϑΝΫλϦϯά(ୈ7ষ) • ࢀর༻ςʔϒϧͷ௥Ճ • ඪ४తͳίʔυͷద༻ • ඪ४తͳܕͷద༻ • Ωʔઓུͷ੔ཧ •

    ΧϥϜ੍໿ͷ࡟আ • σϑΥϧτ஋ͷ࡟আ • ψϧෆՄ੍໿ͷ࡟আ • σʔλͷҠಈ • શ෦Ͱ13ݸ
  12. ΞʔΩςΫνϟɾϦϑΝΫλϦϯά(ୈ9ষ) • CRUDϝιουͷ௥Ճ • ϛϥʔϦϯάςʔϒϧͷ௥ Ճ • Ϧʔυϝιουͷ௥Ճ • ϏϡʔʹΑΔςʔϒϧͷΧ

    ϓηϧԽ • ܭࢉϝιουͷಋೖ • ΠϯσοΫεͷಋೖ • ಡΈࠐΈઐ༻ςʔϒϧͷಋ ೖ • ਖ਼ࣜͳσʔλιʔεͷ࢖༻ • શ෦Ͱ12ݸ