SQLã¯ãããŒã¿æœåºã«é¢ããŠã¯ã»ãŒå šèœã§ãã ïŒèª°ããç¥ã£ãŠããããã§ã¯ãããŸãããã1ã€ã®SQLã¯ãšãªã§ã Mandelbrotã®ã»ãããã°ã©ãã£ã«ã«ã«æ§ç¯ã§ããŸãïŒã ãããã1ã€ã®åé¡ãåŒãç¶ãæŠå¿µçã«è§£æ±ºãããŠããŸãããããã¯ãããŒã¿ã¹ããŒãã®ç§»è¡ã®åé¡ã§ãã

ITã®ãã£ãªã¢ã®ããŸããŸãªæ®µéã§ãäœæ¥äžã®ããŒã¿ããŒã¹ã®æ§é ãå¶åŸ¡ãããœãããŠã§ã¢ã®æ°ããããŒãžã§ã³ãå±éããããã³ã«æŽæ°ããããšã¯éåžžã«å°é£ã«çŽé¢ãããšæããŸãã ãã§ã«ä¿®æ£ãããåŸã«æ»ããã°ãããã£ãŒã«ããããŒãã«ã«ãªãããªã©ã®ãšã©ãŒããã¹ãã¬ãŒãžãä¿®æ£ãããããæ¶å»ããŸããïŒã-ããããã¹ãŠç¥ã£ãŠããŸããïŒ
ãã®åé¡ã®æ·±å»åºŠã¯ããœãŒã¹ã³ãŒãã®ããŒãžã§ã³ç®¡çã®åé¡ãæ ¹æ¬çã«è§£æ±ºããæ¹æ³ãšã¯å¯Ÿç §çã«ç¹ã«æ確ã§ããGitãSubversionã®ãããªã·ã¹ãã ã§ã¯ãå€ãã®éçºè ã®ã³ââã©ãã¬ãŒã·ã§ã³ãå¶åŸ¡ã§ããåäžã®å€æŽã倱ãããšãªããããã¹ãŠã®åããèšé²ãããããŒã ã¯ãŒã¯ã®çµæãåéã§ããŸãäžç·ã«ã ãããããã®è¯ãç¶æ³ã¯ãããŒãžã§ã³ç®¡çã·ã¹ãã ã®é©çšå¯èœæ§ãçµãããšããã§çµãããŸãã ããŒã¿ã¹ããŒã ã®æ§é ã«ã€ããŠèª¬æããå Žåããã®éçºã®ããã®ããŒãžã§ã³ç®¡çã·ã¹ãã ã®äœ¿çšã¯äŸç¶ãšããŠéåžžã«éãããŠããŸãã
ããŒã¹ã§æ§é ãå€æŽããã®ã¯ãšãŠãç°¡åã§é åçã§ãïŒ ãã®ãããªå€æŽãææžåãããŠããªãå Žåãå°æ¥çã«ã·ã¹ãã ãéçºããå¿ èŠãããã倧æšäºãè¿ã¥ããŠããŸãã ããããããŒã¿ããŒã¹ã®æ§é ãå€æŽããããã«ãã¹ãŠã®ã¹ããããææžåããå¿ èŠæ§ãèªèããŠããããè¡ãããšã¯éåžžã«äžäŸ¿ã§ãããããŒã¿ã¹ããŒã ãå®çŸ©ããDDLèšèªã¯ããã«åœ¹ç«ããªããšããçµè«ã«éããŸãã ããšãã°ãããŒãã«ã«ãã£ãŒã«ããè¿œå ããã«ã¯ãALTER TABLE ADDã³ãã³ããå¿ èŠã§ãã ãã®åŒã1åã ãå®è¡ãããã£ãŒã«ãããŸã ããŒãã«ã«ååšããªãç¬éã«å®è¡ããããšã¯çã«ããªã£ãŠããŸããããã§ã«å¿ èŠã§ãã ä»ã®ãšãã«ãã®ã¹ã¯ãªãããå®è¡ãããšãã¹ã¯ãªããèªäœã®å®è¡ã§ãšã©ãŒãçºçããããããã«æªãããšã«ãããŒã¿ããŒã¹æ§é ã®ç¶æ ãäžé©åã«ãªããŸãã
éçºè ã«ãã£ãŠè¡ããããã¹ãŠã®å€æŽãåäžã®çµæã«éçŽãããã®å®è£ ãå¶åŸ¡ããæ¹æ³ã¯ïŒ
ã¢ãããŒãïŒ1ïŒå€æŽã¹ã¯ãªããã®èç©
è¿œå ã®ããŒã«ã䜿çšããã«æåã§ãã®åé¡ã解決ããå®çšçãªãœãªã¥ãŒã·ã§ã³ã¯ããããžã§ã¯ãã³ãŒãããŒã¹ã«çªå·ä»ãã¹ã¯ãªããã䜿çšããŠãã©ã«ããŒãäœæããããŒã¿ããŒã¹æ§é ãå€æŽãããããããã®ãã©ã«ããŒã«èç©ããéçºãããžã§ã¯ãã®åå è ã«æãå³ããèŠåŸãå°å ¥ããããšã§ãã 次ã®ã¹ã¯ãªãããã¡ã€ã«ã§ã®å€æŽãèšé²ããããã»ã¹ãšãããŒã¿ããŒã¹ãžã®å€æŽããããŒãªã³ã°ãããããã»ã¹ã圢åŒåããå¿ èŠããããŸãã
ããé«åºŠã§äŸ¿å©ãªãœãªã¥ãŒã·ã§ã³ã¯ã Liquibaseãªã©ã®ã·ã¹ãã ã䜿çšããããšã§ãã Liquibaseã¯ãæåŸã«å®è¡ãããããŒã¿æ§é ã®å€æŽåæ°ãå¶åŸ¡ããã¹ã¯ãªãããæ§é å€æŽã¹ã¯ãªãããç·åœ¢åœ¢åŒã§1åã ãå®è¡ããããã«ããŸãã ããã¯ãã§ã«å€ãã®ããšã§ãããLiquibaseã䜿çšããããšã§ãããŒã¿ã¹ããŒã ã®éçºãšæŽæ°ã§çºçããæ··ä¹±ã確å®ã«æé€ã§ããŸãã
ããã§ããå€æŽã¹ã¯ãªããã®èç©ã«åºã¥ããLiquibaseããã®ä»ã®ããŒã«ã䜿çšããŠããã¢ããªã±ãŒã·ã§ã³ã®ãœãããŠã§ã¢ãœãŒã¹ã³ãŒããå€æŽããã®ã¯ç°¡åã§æè¡çã§ããã®ã§ãããŒã¿ã¹ããŒããå€æŽããã¿ã¹ã¯ã¯ç°¡åã§æè¡çã§ã¯ãããŸããã
ãŸããå€æŽã¹ã¯ãªãããèç©ãããŸãã ååã«é·æéå®è¡ããããããžã§ã¯ãã¯ããããã®ã¹ã¯ãªãããã倧ããªãããŒã«ããåŒãåºããŸããã»ãšãã©ã®ã¹ã¯ãªããã¯ãããªãåã«è¡ãããå€æŽãå«ãŸããŠãããããé¢é£æ§ã倱ããŸãã ãããŒã«ãå šäœãä¿åããããšã¯ç¡æå³ã§ãããªããªãããã°ã®ããå Žæã§ã®å€æŽã¯ãå¥ã®å Žæã§ã®å€æŽã®çµæããã£ã³ã»ã«ããå¯èœæ§ãããããã§ãããã°eã 倧ãããªãããããã°ãèŠããšãããŒã¹ã®æ§é ã«é¢ããçŸåšã®ç解ãç解ããããšãã§ããªããªããŸãã ãŸããããšãã°å®å šã«æ°ãããããžã§ã¯ãã§ããŒã¿ããŒã¹æ§é ããŒãããåçŸãããå Žåã¯ãã¹ã¯ãªãããå®è¡ããããã»ã¹ã§é²åçéçºã®å šãã¹ãç¹°ãè¿ãå¿ èŠããããŸãïŒ
第äºã«ããã®ã¢ãããŒãã§ã¯ãå€æŽã»ãããä»ããŠããŒã¿ããŒã¹æ§é ãå€æŽããè€éããšãããã°ã©ã ã®ãœãŒã¹ã³ãŒããå€æŽããåçŽããšã®éã«å€§ããªéãããããŸãã
ãæ°ã«å ¥ãã®ããã°ã©ãã³ã°èšèªã§ã¯ã©ã¹ãèšè¿°ããã³ãŒãããããã·ã¹ãã ãæ¹åããéçšã§ã1ã€ã®ã¡ãœãããã¯ã©ã¹ã«è¿œå ããä»ã®ã¡ãœãããåé€ããå¿ èŠããããšããŸãã äœããŠãã®ïŒ ã¯ã©ã¹ã®ãœãŒã¹ã³ãŒããååŸããŠå€æŽããããŒãžã§ã³ç®¡çã·ã¹ãã ã«ã³ãããããŸããïŒ æ¬¡ã®åœ¢åŒã®ã³ãã³ãã䜿çšããŠå€æŽã»ãããäœæããå¿ èŠã¯ãããŸããã
alter class drop method foo;
alter class add method bar(âŠ) {
âŠ
}
ããŒã¿ã¹ããŒãæ§é ã«å¯ŸããŠãããè¡ãå¿ èŠãããã®ã¯ãªãã§ããïŒ
ãã¡ããããã®çç±ã¯ãæ§é ãå€æŽãããšãã«äœããããå¿ èŠãããããŒã¿ãããŒã¿ããŒã¹ã«å«ãŸããŠããããã§ãã ãã®åé¡ã«ã€ããŠè©³ãã説æããŸããããŸããåé¡ã解決ããããã®å¥ã®å¯èœãªã¢ãããŒããèŠãŠã¿ãŸãããã
ã¢ãããŒã2ïŒiçDDLã¹ã¯ãªãã
ãµãŒããŒã®æ§ææã«ãããŒã¿ããŒã¹ã¹ããŒãã®ç§»è¡æã«çºçããåé¡ãšåæ§ã®åé¡ãé·ãéçºçããŠããŸããã
ãµãŒããŒãžã®å¿ èŠãªãœãããŠã§ã¢ã®ã€ã³ã¹ããŒã«ãèªååããæ§æã®æŽæ°ãæäŸããæ¹æ³ã¯ïŒ 空ã®ä»®æ³ãã·ã³ã§å®è¡ããããšããã®äžã«ãã¹ãŠãã€ã³ã¹ããŒã«ããŠæ§æããã·ã§ã«ã¹ã¯ãªãããäœæã§ããŸãã ããã¯ãããŒã¿ããŒã¹æ§é ãäœæããã¹ã¯ãªããïŒCREATE TABLE ...ã¹ã¯ãªããïŒã«é¡äŒŒããŠããŸãããåé¡ã¯ã空ã®ãã·ã³äžã§ã®ã¿1åããå®è¡ã§ããªãããšã§ãã ãã·ã³ããã§ã«å±éãããŠå®è¡ãããŠãããã·ã¹ãã ã®æ°ããä»æ§ã«åŸã£ãŠåäœããå Žåãããšãã°ãå¥ã®ããŒãžã§ã³ã®Javaãå¿ èŠã«ãªããŸããããã«æçš¿ããã«ã¯ã©ãããã°ããã§ãããå€ãããŒãžã§ã³ãç Žæ£ããŠæ°ããããŒãžã§ã³ã®Javaãã€ã³ã¹ããŒã«ããå€æŽã¹ã¯ãªãããè¿œå ããŸããïŒ ããŠã空ã®ãã·ã³ã§æ§æãåçŸããå¿ èŠãããå Žå-éå»ã«è¡ã£ããã¹ãŠã®ã¹ããããå®è¡ããã«ã¯äœãå¿ èŠã§ããïŒ
ãã®å Žåã«çºçããäž»ãªéèŠãªè³ªåïŒã€ã³ãã©ã¹ãã©ã¯ãã£/ããŒã¿ã¹ããŒã ãããœãŒã¹ã³ãŒããç·šéããã®ãšåããããç°¡åã«ç·šéã§ããŸããïŒãã®èª¬æãçŽæ¥å€æŽããŠããŒãžã§ã³ç®¡çã«æžã蟌ãããšã§å¯èœã§ããïŒ
ãµãŒããŒæ§æã®åé¡ã«å¯Ÿãããããã®è³ªåã«å¯Ÿããçãã¯ã Infastructure as CodeïŒIaCïŒã®ååãšãæ§æ管çã·ã¹ãã ãšããŠç¥ãããã·ã¹ãã ã®ã¯ã©ã¹å šäœã®åºçŸã§ãããAnsibleãChefãPuppetãªã©ã§ãã demçæ§ïŒã¹ãçæ§ïŒããã³åæïŒåæãåæïŒã ãããã®çšèªã¯äž¡æ¹ãšãæ°åŠããåçšããŠããŸãã åé¡ã«é©çšãããäžå¿ èŠãªåœ¢åŒãç Žæ£ããå Žåããããã®çšèªã¯æ¬¡ã®ããšã瀺ããŸãã
- ã¹ãçããã³åæã¹ã¯ãªããã¯ããªããžã§ã¯ãã«å¯ŸããŠå®è¡ããå¿ èŠãããã¢ã¯ã·ã§ã³ã§ã¯ãªã ããªããžã§ã¯ããåã蟌ãå¿ èŠãããç¶æ ãèšè¿°ããŸãã
- ã¹ãçæ§ãšã¯ããã®ãããªã¹ã¯ãªãããæ£åžžã«å®è¡ããããªããžã§ã¯ãããã§ã«ç®çã®ç¶æ ã«ããå Žåãã¹ã¯ãªããã®ç¹°ãè¿ãå®è¡ã¯äœãå€æŽãããäœããããããªãããšãæå³ããŸãã ããšãã°ãå¿ èŠãªããã±ãŒãžã®ã€ã³ã¹ããŒã«ã宣èšããã·ã¹ãã ã®æ§æ管çã¹ã¯ãªããã«ã€ããŠè©±ããŠããå Žåããããã®ããã±ãŒãžãæ¢ã«ã€ã³ã¹ããŒã«ãããŠãããšãã¹ã¯ãªããã¯åèµ·åæã«æäœãå®è¡ããŸããã
- åæãšã¯ãã¹ã¯ãªãããå®è¡ãŸãã¯å€±æããªãã£ãå Žåãå床å®è¡ãããšãã«ãã·ã¹ãã ãç®çã®ç¶æ ã«ãªãåŸåãããããšãæå³ããŸãã ããšãã°ãããã±ãŒãžã®ããŠã³ããŒãæã«ãããã¯ãŒã¯ãæ¶å€±ããããã«ããã±ãŒãžã®1ã€ã®ã€ã³ã¹ããŒã«ã倱æããå Žåãã¹ã¯ãªãããåå®è¡ãããšãäžè¶³ããŠããããã±ãŒãžãã€ã³ã¹ããŒã«ãããŸãïŒååã€ã³ã¹ããŒã«ãããããã±ãŒãžã¯ãã®ãŸãŸæ®ããŸãïŒã
ãããã®ååã¯äžè¬çãªãã®ã§ããããã·ã³ã®ãœãããŠã§ã¢æ§æã ãã«é©çšãããããã§ã¯ãããŸããã ããšãã°ãTerraformã·ã¹ãã ã䜿çšãããšãå¿ èŠãªä»®æ³ãµãŒããŒã®ã»ãããšãã®ããŒããŠã§ã¢æ§æãã³ãŒãã®åœ¢åŒã§æå®ããã¯ã©ãŠãå ã®ä»®æ³ãã·ã³çŸ€ãå¶åŸ¡ã§ããŸãã
ãããã®ååãããŒã¿ã¹ããŒãã®å¶åŸ¡ã«ã©ã®ããã«åœ¹ç«ã€ããç解ããã«ã¯ãäžèšã§ãã§ã«ååã ãšæããŸãã ããŒã¿ããŒã¹ãããŒã¯ãŒããCONVERGEãããµããŒãããŠããã次ã®ã¹ã¯ãªããããããšããŸãã
CONVERGE TABLE OrderHeader(
id VARCHAR(30) NOT NULL,
date DATETIME DEFAULT GETDATE(),
customer_id VARCHAR(30),
customer_name VARCHAR(100),
CONSTRAINT Pk_OrderHeader PRIMARY KEY (id)
);
CONVERGEããŒã¯ãŒãã¯ããããŒãã«ãç®çã®æ§é ã«ããããšè§£éããå¿ èŠããããŸãã ã€ãŸããããŒãã«ããªãå Žåã¯ãããŒãã«ãäœæããããŒãã«ãããå Žåã¯ããã®äžã«ãããã£ãŒã«ããã¿ã€ããã€ã³ããã¯ã¹ãå€éšããŒãããã©ã«ãå€ãªã©ã確èªãããã®äžã®äœããå€æŽããå¿ èŠããããã©ããã確èªããŸãé©åãªçš®é¡ã«ãããããããããã®ããŒãã«ã
ããŒã¿ããŒã¹ããã®ãããªããŒã¯ãŒãããµããŒãã§ããå Žåãã€ãŸããããŒã¿ããŒã¹ã«å¯ŸããŠã¹ãçããã³åæDDLã¹ã¯ãªãããèšè¿°ã§ããå Žåããã®èšäºãæžãå¿ èŠã¯ãããŸããã å šå¡ãããŒãžã§ã³ç®¡çã·ã¹ãã ã«ãCONVERGE TABLEãã¹ã¯ãªãããä¿æããŠãçŸåšã®ããŒã¿ã¹ããŒã ãèšè¿°ãããœãŒã¹ã³ãŒããæäœããã®ãšåãããã«ããããæäœããŸããããŒãã«ã«æ°ãããã£ãŒã«ããå¿ èŠã§ããã€ã³ããã¯ã¹ã®ãã£ãŒã«ã-ç·šéã ïŒããªãã®è³ªåãèããŸãïŒããŒã¿ã®ç§»è¡ã«ã€ããŠã¯ã©ãã§ãã-ããããå¿èãç§ã¯ããã«ããã«é²ã¿ãŸããïŒ
æ®å¿µãªããããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®äžçã§ã¯ãDDLã®çã®ã¹ãçæ§ããµããŒãããåãã¯ãããŸããã ãããŸã§ããŒã¿ããŒã¹ã§DDLã³ãŒãã®ã¹ãçæ§ã«åããŠè¡ãããããšã¯ãã¹ãŠãCREATE IF NOT EXISTSæ§é ã®ãµããŒãã§ãããããã¯ççŽã«èšã£ãŠãããªã匱ãè©Šã¿ã§ãã ãã¡ãããCREATE TABLE IF NOT EXISTSã¹ã¯ãªããã¯ãå€éšçã«ã¯ã¹ãçãšããŠåäœããŸãïŒããŒãã«ãæ¢ã«äœæãããŠããå Žåã¯ãšã©ãŒã«ãªããŸããïŒããåæãšããŠã¯åäœããŸããïŒæ¢ã«äœæãããããŒãã«ã®æ§é ãå€æŽããŸããïŒã
å€éšããŒã«ã«äŸåããå¿ èŠããããŸãã ããšãã°ã Celestaã·ã¹ãã ã§ã¯ãã¹ãçããã³åæDDLã䜿çšã§ããŸãã éçºè ãšéçºããŒã«ïŒERãã€ã¢ã°ã©ã ã®ããžã¥ã¢ã«ãšãã£ã¿ãŒãªã©ïŒãéåžžã®DDLã¹ã¯ãªããã®ããã«èŠããããã«ãCelestaããŒã¯ãŒãã¯CREATEã䜿çšããŸãããCelestaã§ã¯ä»®æ³CONVERGEã®æå³ãæã¡ãŸãã Celestaã¯ãèµ·åãããã³ã«ãæ¥ç¶ãããŠããçŸåšã®ããŒã¿ããŒã¹æ§é ãšCelestaSQL DDLã¹ã¯ãªãããšããŠèšè¿°ãããŠããç®çã®æ§é ãæ¯èŒããå¿ èŠã«å¿ããŠå¿ èŠæå°éã®CREATE / ALTER / DROPã³ãã³ããå®è¡ããŸãã çŸåšãµããŒããããŠããããŒã¿ããŒã¹ã¯ãPostgreSQLãOracleãMS SQL Serverãããã³H2ã®4çš®é¡ã§ãïŒåŸè ã¯ãäž»ã«åäœãã¹ãçµç¹ã®ããŒãºã«å¯Ÿå¿ããŠããŸãïŒã
ããŒã¿ããŒã¹æ§é ãå®çŸ©ããiçã¹ã¯ãªããã¯ãåçŽã«ååŸããŠçŽç·çã«å®è¡ããããšã¯ã§ããŸããã ãåãã®ããã«ãããŒã¿ããŒã¹å ã®äžéšã®ãªããžã§ã¯ãã¯ä»ã®ãªããžã§ã¯ãã«äŸåããŠããŸã-ããšãã°ãããŒãã«ã¯å€éšããŒãä»ããŠçžäºã«åç §ãããã¥ãŒãšã€ã³ããã¯ã¹ã¯ããŒãã«ã«äŸåããŸãããããã£ãŠãäžé£ã®ãªããžã§ã¯ããäœæ/åæ§ç¯ããåã«ãã©ã³ã¯ä»ãããå¿ èŠããããŸãçžäºäŸåé¢ä¿ã®é åºïŒåœ¢åŒçã«èšãã°ãäŸåé¢ä¿ã°ã©ãã®ããããžã«ã«ãœãŒããå®è¡ããäœãäŸåããŠããªããªããžã§ã¯ãããéå§ããŠãªããžã§ã¯ããåŠçããŸãã æ¥ç¶ããããŒãã«ãå€æŽããåŸã§å€éšããŒãåŸã§åŸ©å ããããã«ãå€éšããŒããªã»ããããå¿ èŠãããããšããããããŸãã ãã®åé¡ã¯Celestaã§è§£æ±ºããããããã»ãšãã©ã®å Žåãåé¡ãªãã¢ããã°ã¬ãŒãã§ããŸãã
ããŒã¿ç§»è¡
ã§ã¯ãããŒã¿å€æã«ã€ããŠã¯ã©ãã§ãããããåçŽãªALTERã ãã§ã¯ååã§ã¯ãªãããã§ãã ããšãã°ã空ã§ãªãããŒãã«ã«NOT NULLãã£ãŒã«ããè¿œå ããDEFAULTå€ãæäŸããªãå Žåã¯ã©ããªããŸããïŒ å®éããã®ãããªãã£ãŒã«ãã«ããŒã¿ãäºåã«å ¥åãããŠããªãå ŽåãããŒã¿ããŒã¹ã¯ALTER TABLE ADDã¹ã¯ãªããã®å®è¡ãèš±å¯ããŸããã ãããŠãå€éšããŒãè¿œå ãããããããŒãã«å ã®ãã¹ãŠã®ããŒã¿ãå¶éãæºãããŠããããã§ã¯ãªãå Žå ãŸããããšãã°ãã¢ããªã±ãŒã·ã§ã³ããžãã¯ãå€æŽãããããåããå¥ã®åã«ããŒã¿ã転éãããå Žåã¯ã©ãã§ããããã
ãããã®è³ªåã¯ãã¹ãŠæ£ããã®ã§ããããŸããã¢ããªã±ãŒã·ã§ã³ã®éçºäžã«ããŒã¿ããŒã¹ã§è¡ãã»ãšãã©ã®å€æŽã«ã€ããŠã移è¡ã¯å¿ èŠãªããåçŽãªALTERã¹ã¯ãªããã§ååã§ããããšã«æ³šæããŠãã ããã æ°ããããŒãã«ãŸãã¯æ°ããåãããŒãã«ã«è¿œå ããã ãã®å ŽåïŒNULLABLEãŸãã¯DEFAULTå€ã䜿çšïŒãããŒã¿ã移è¡ããå¿ èŠã¯ãããŸããã ã€ã³ããã¯ã¹ãè¿œå ãŸãã¯åæ§ç¯ããå ŽåãããŒã¿ã移è¡ããå¿ èŠã¯ãããŸããã ãã¥ãŒã®ã¯ãšãªãå€æŽãããå Žåãäœã移è¡ããå¿ èŠã¯ãããŸããã Celestaã·ã¹ãã ã䜿çšããæ £è¡ã¯ãéçºè ã«ããå€æŽã®å€§éšåããã®ã¿ã€ãã®ãã®ã§ããããšã瀺ããŠããŸãã
ããŒã¿ã®ç§»è¡ãæ¬åœã«å¿ èŠãªå Žåã¯ãã¯ãã1åéãã®ç§»è¡ã¹ã¯ãªãããäœæããŠå®è¡ããå¿ èŠããããŸãã ãã®ã¹ã¯ãªããããé·æã«ããã£ãŠãä¿åããå¿ èŠããªããšããã ãã§ããããããã°ãšã¢ããªã±ãŒã·ã§ã³ã®ã¹ããŒãªãŒã¯ãå€æŽãã°ã«åºã¥ããŠæ§ç¯ãããã·ã¹ãã ãããã¯ããã«ç°¡åã§ãã
空ã§ãªãããŒãã«ã«å€éšããŒãè¿œå ããå ŽåãèããŠã¿ãŸãããããã®ãããªããŒãæºããã¬ã³ãŒãã¯ãã¹ãŠãããŸããã ã¢ããã°ã¬ãŒãããã»ã¹äžã«ãCelestaã¯ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEYã³ãã³ãã䜿çšããŠãã®ãããªããŒãäœæããããšããŸãã 圌女ãæåããå Žå-ããŸãããã°-ã·ã¹ãã ã¯åæ¢ããCelestaã¯äœããã®çç±ã§ãã®ãããªãªããžã§ã¯ããããŒã¿ããŒã¹ããã®ã¡ãã»ãŒãžã§æŽæ°ã§ããªãã£ãããšãå ±åããŸãã
changelog-systemsã®å Žåãäžéç¶æ ã§ååå®äºããŠä¿®æ£ããããã§ã³ãžã»ããã»ã©æªããã®ã¯ãããŸããããã®ç¶æ³ã§ã¯ãã·ã¹ãã ã¯2ã€ã®ãªããžã§ã³ã®ãäžéãã«ãããæåã§ãã解決ã§ããŸããã å€ãã®ããŒã¿ããŒã¹ã§ããŒã«ããã¯DDLãã©ã³ã¶ã¯ã·ã§ã³ããµããŒããããŠããªããããããã«å°é£ãçããŸãã
ãå€æŽãã°ãã·ã¹ãã ãšã¯ç°ãªãããåæãã·ã¹ãã ã®å ŽåãæåŸãŸã§å®äºããŠããªãæŽæ°ã¯åé¡ã«ãªããŸãããALTERã³ãã³ããçæããããã«ãã·ã¹ãã ã¯ããŒã¿ããŒã¹ã®çŸåšã®å®éã®ç¶æ ãç®çã®ç¶æ ãšæ¯èŒããããè©Šã¿ã§ã圌女ã¯å¥ã®è©Šã¿ã§çµããããšããŸãã
æŽæ°ãèªåçã«å®è¡ã§ããªãç¶æ³ã«çŽé¢ãããšïŒç¹°ãè¿ããŸããããã®ç¶æ³ã¯éåžžã«ãŸãã§ãïŒã1åéãã®ã¹ã¯ãªãããäœæã§ããŸãã åç §ããŒãã«ã«å¿ èŠãªããŒã¿ãå ¥åããããã«ããCelestaãæŽæ°ãèªåçã«å®è¡ããããã®æ¡ä»¶ãäœæãããšããŸãã ãã®ã¹ã¯ãªããã¯ãå®çšŒåããŒã¹ã®æ°ããã³ããŒã§ãããã°ããå®çšŒåããŒã¹ã§å®è¡ããŠããCelestaæŽæ°ãçæã§ããŸãã
çµå±ãã¹ã¯ãªããã¯äºåºŠãšå¿ èŠãªãã®ã§ã åã«æšãŠãããšãã§ããŸã ïŒ çµå±ã®ãšãããäœæ¥ããŒã¹ã¯ãã§ã«æ§é äžå¿ èŠãªç¶æ ã«ãããæ°ããããŒã¹ãæåããäœæããäºå®ãããå Žåã¯ãããŒã¹ããã¹ãŠã®æ¹æ³ã§é²è¡ãããŠãéçºããã»ã¹ã§ãã®æ§é ãå®æãããå¿ èŠã¯ãããŸããã
ããããããã®ã¢ãããŒãã¯ãæ§é ãå€æŽãããã³ã«ããŒã¿ã®ç§»è¡ã«å¿ èŠãªæé ãæ€èšãããã®ãããªæé ãå€æŽã»ããã«åã蟌ãå€æŽãã°ã·ã¹ãã ã䜿çšãããããä¿¡é Œæ§ãäœããšæãããŸãã ããããèããŠã¿ããšããã®ç¹ã«é¢ããchangelogã·ã¹ãã ã®ä¿¡é Œæ§ã¯æ³åäžã®ãã®ã§ããããšãæããã«ãªããŸãã ãåç¥ã®ããã«ãæœåšçãªãšã©ãŒã®ãªãããã°ã©ã ã¯ãããŸãã;ãã®ã«ãŒã«ã¯ããŒã¿å€æŽã¹ã¯ãªããã«ãé©çšãããŸãã å€æŽã»ããã¹ã¯ãªãããæ¢åã®ããŒã¿ã»ããã§ãããã°ãããæ£ããåäœã瀺ãããšããäºå®ã¯ãããŒã¿ã«å¯ŸããŠãšã©ãŒãªãã§å®è¡ãããããšã100ïŒ ç¢ºå®ã«ä¿èšŒãããã®ã§ã¯ãããŸããã demçDDLã䜿çšããå Žåãå°ãªããšãããŒã¿å€æŽã¹ã¯ãªãããå€æŽäžå¯ãšããŠå®£èšããªãå Žåãç£æ»å±æ§ã¯ãã§ãã¯ãµã ã«ãã£ãŠä¿è·ãããŸãã ãšã©ãŒãçºçããå Žåãã·ã¹ãã ãç®çã®æ§é ã«çž®å°ãããŸã§ãæŽæ°ããã€ã§ãç¹°ãè¿ãããšãã§ããŸãã Celestaã¯ããŒã¿ãå«ãåãšããŒãã«ã®ãããããèªåçã«å®è¡ããããã®æäœã¯æåã§å®è¡ããããããããŒã¿ã¯å€±ãããŸããã
* * *
å人çã«ã¯ãããŒã¿ããŒã¹éçºè ãã¹ãçæ§ãšDDLã³ã³ããŒãžã§ã³ã¹ã®å®éã®ãµããŒããå®è£ ããããšãåžæããŸãã
UPDïŒ2018幎åé ãããCelestaSQLã䜿çšããŠã 2bassã·ã¹ãã ã䜿çšããŠä»»æã®ããŒã¿ããŒã¹ãã¹ãçã«æŽæ°ã§ããŸãã