O/Rãããã³ã°ã¯çŸå®³ãã£ãŠäžå©ãªãïŒ
O/Rãããã³ã°(Object-relational mapping)ã«ã€ããŠãWikipediaã«ã¯ä»¥äžã®ããã«æžãããŠããŸãã
ããŒã¿ããŒã¹ãšãªããžã§ã¯ãæåããã°ã©ãã³ã°èšèªã®éã®éäºæãªããŒã¿ã倿ããããã°ã©ãã³ã°ææ³ã§ããã
O/Rãããã³ã°ãå®çŸããä»çµã¿ããO/RããããŒãšèšããŸããïŒäž¡è ãåºå¥ããªããŠãç§ãèšãããããšã¯äŒãããšæããŸãã®ã§ãORMãšçµ±äžããŠèšè¿°ããŸãïŒïŒãŸããå人çãªçç±ã§ãããã°ã©ãã³ã°ååŠè åãã«èªããããå£èª¿ã«ããŠããŸãããåå¿è åãã®èšäºãšããããã§ã¯ãããŸããïŒ
æè¿ã¯WEBã¢ããªéçºãããã«ããã£ãŠãWEBãã¬ãŒã ã¯ãŒã¯ã«æšæºã§äœããã®ORMãçµã¿èŸŒãŸããŠããããšãå€ãããããã®ååšãç¥ããªã人ã¯ãŸãããªãã§ãããã
ç§ãäœåºŠãORMãšåãåã£ãŠããŸããããããããããŠãããã¡ã«æ°ãã€ããŸããã
ORMã¯ããã©ããããïŒ
âŠã£ãŠããšã«ã
ã¿ããªé»ã£ãŠäœ¿ã£ãŠãããããç§ãé»ã£ãŠã䟿å©âªããšèšã£ãŠäœ¿ããã
å³åãå³ãå·Šåãå·ŠããŸããå³ãïŒãïŒãæ¢ãŸãâŠãŸãããããã£ãŠéåãããããé²ããïŒãšæã£ãŠããŸããããããéçã§ãã
ãªã¬ãªã¬ORMã®çŽæ°ã«ã€ãããŠæçŽããããªã£ãè¡åãæããäžã®äžã«ããORMãå°ã調ã¹ãŠã¿ãŸããã
ã§ããããããã¯æŽããŸããã§ããã
ïŒçŸåšã®ïŒç§ã®çµè«ã¯ãO/RããããŒã¯çŸå®³ãã£ãŠäžå©ãªãïŒãã§ãã
âŠããã¯èšã£ãŠãããªããžã§ã¯ãåç䞻矩è ã¯çŽåŸããªãã§ãããã
圌ãã«ã¯äœãèšã£ãŠãç¡é§ãããããŸãããâŠäžã«èšãORMã®ãã¡ãªãããšã¡ãªããããªãã¹ãŠãå人çãªèŠè§£ãè¿°ã¹ãŠãããããšæããŸãã
ORMã®ã¡ãªããïŒïŒïŒ
SQLãç¥ããªããŠãCRUDåŠçãæžããïŒïŒïŒ
ãšããããã°ã©ãã³ã°ã¹ã¯ãŒã«ã®ãRuby On RailsãåŠç¿ææãçºããŠããŠé©ããŸããã
ãActiveRecordã¯ãSQLãšããé£ããèšèªãåŠã°ãªããŠããããŒã¿ããŒã¹æäœãã§ãã䟿å©ãªä»çµã¿ã§ãããããªããŒã³ã®èšè¿°ãããã£ãšæžãããŠããŸããã
googleå çã§èª¿ã¹ãŠã¿ããšãããQiitaã§ãåãããšãèšã£ãŠãã人ãããŸãã
ãSQLã¯ã§ããŸãããORMã¯äœ¿ããŸãããšèšã£ãŠãã人ãããŸãã
ãORMãããããSQLç¥ããªããŠãOKããšèšãåã£ãŠãã人ãããŸãã
ããããã³ã£ããïŒ
ã§ããããã¯ãŸããã§ãã
å éšçã«ã©ããªSQLãçºè¡ãããŠããç¥ããªããšãORMãšããéå ·ã«æ¯ãåãããŠããããšã«ãªããŸãã
ãã¥ãŒãã³ã°ãäžå¯§ã«è¡ããªãã°ãªãã®ããšãæé©åãããSQLæãæ±ããããã«ãªããããã®ã§ãã
äŸãã°ã§ãããN+1åé¡ãªã©ãèããŠããæç¹ã§ãããŒãã«ã®ã«ãŒãã£ããªãã£ã¯ç¡èŠã§ããŸããããããããªãã°ãã¯ããããRDBMSãšSQLãåŠã¶ã»ãããé åããªããã§ããŠãé·ãç®ã§èŠãã°è¿éã§ãã
ã€ã³ããŒãã³ã¹ã»ãã¹ãããã®è§£æ¶ïŒïŒïŒ
ããããORMã¯ã€ã³ããŒãã³ã¹ ãã¹ãããïŒimpedance mismatchïŒã®è§£æ¶ãå³ãããã®ææ³ã ãšèšãããŠããŸããO/RããããŒã¯ãéãã·ã¹ãã ããç°ãªããã©ãã€ã ãã®ãã®ããæè»ã«ãã£ã€ããããšããææ³ã§ãã
ã§ããããã£ãŠå¿ é ã®åãçµã¿ã§ããïŒ
SQLãšããŒãã«æ§é ãåãã£ãŠãããªãã°ãèšèªã«åãããŠãã©ãã©ã«å±éãçŽãã ãã§ãæéãå¢ããŠããæ°ãããŸãã
ïŒããã°ã©ãã³ã°èšèªã«ãããããããŸãããïŒå¿ ããªããžã§ã¯ãæåããã°ã©ãã³ã°ãªããã®ãããªããã°ãªããªãçç±ã¯ãªãã¯ããªã®ã§ãé åããŒã¿ãªã©ã«ããŠåŠçããã»ããæµããšããŠãããã£ãšã¹ããŒãã ãšæããŸãã
DBãšAPPã®çµå床ã匱ããïŒïŒïŒ
WEBã¢ããªã®CRUDæ©èœã®æ°ã ãSQLæãçšæããæ¹ãçŽ æ©ãéçºãã§ããŸãã
âŠãšããããããžãã¹ããžãã¯ã®ã¿ãªãããã¬ãŒã³ããŒã·ã§ã³ããžãã¯ã®åŠçãSQLã§æ¥µåããŠããŸã£ãæ¹ãåŠçãéãã§ãããããå 茩ITãšã³ãžãã¢ã¯ãå£ãæããŠãSQLã®ã¿ã§ããããšèšã人ãå€ãæ°ãããŸãã
ãããDBãšAPPã®å¯çµåã ãšæ¹å€ããã®ã¯ç°¡åã§ãããå人çã«ã¯ORMã ããä¿®æ£ç¹ãæžãããšããããORMã ããä¿®æ£ç¹ãå¢ããããšã®ã»ããããã£ãšå€ãæ°ãããŸããïŒç¹ã«æªç¥ã®ã·ã¹ãã æ¹ä¿®ã§ãORMå ãããããããåŸãªãæã¯ãææªã§ãïŒ
RDB補åãšNoSQLã®äºææ§ãããORMã©ã€ãã©ãªããããããããŸãããã詳ããç¥ããŸããããããªäŸ¿å©ãªãã®ããããªãããã²æããŠãã ãããã©ã¡ãã«ãããããã¯äŸ¿å©ïŒããšæã£ãORMã«åºäŒã£ãããšããããŸããã
âŠãšããããã§ãDBãšå¯çµåããã³ãŒãã£ã³ã°ã§OKïŒ
äžäººã§å°èŠæš¡ãªéçºãããæã¯ãå²ãåã£ãŠã³ãŒããæžããŠããŸãã
â» çµå床ã®åé¡ã¯ãŸãåŸã§ããµããŸãã
管çããŒã«ãªã©ã«ããã¹ããŒã管çããããïŒïŒïŒ
ã¹ããŒã管çã䟿å©ãªã®ã¯ãORMãããããçŽæ¥çãªã¡ãªããã§ã¯ãããŸãããããã¯ã¹ããŒã管çããŒã«ãåªããŠããã ãã®è©±ã§ãã
ããŒã¿ããŒã¹æ¥ç¶ããšã©ãŒåŠçãç°¡åã«ããïŒ
ããããORMã®ã¡ãªãããšãããããDBæäœã©ã€ãã©ãªããããããŠãããæ©èœã§ãããã
SQLã®æ¹èšãæ°ã«ããªããŠããïŒïŒïŒ
SQLã®CRUDãçŽæžãããïŒSQLã®æ¹èšãæ°ã«ããªããã°ãªããªãç¶æ³ãšã¯ãããŒã¿ããŒã¹è£œåããªãã¬ã€ã¹ããæã«åé¡ã«ãªããšæããŸããããããããŒã¿ããŒã¹è£œåãéäžã§ãªãã¬ã€ã¹ããäºæ¡ã«ããŸãééããããšããããŸããã
ããã¯ãå ã«ããµãããDBãšããã°ã©ã ã®å¯çµåãšæ¬è³ªçã«åãåé¡ã§ãã
ã§ãåšãã®ãšã³ãžãã¢ã«èããŠãããããªDBã亀æãããããžã§ã¯ãã«ãã¢ãµã€ã³ããããšããªããšèšããŸãã
DB2ãSQLServerãOracleãªã©ã®RDBãOSS-DBã«å€æŽãããªããŠè©±ã¯ããããããããããã®ãããããŸããããã¯ããããæåã®RDB䜿ã£ãŠããæç¹ã§äœããééã£ãŠããæ°ãããŸãããŸãããããªããšã«ãšã³ãžãã¢ã®ãªãœãŒã¹ã䜿ããããã©ã€ã»ã³ã¹æãæ¯æã£ãã»ããå®ãã¯ãã
æ§èœãäžãããããªãã°ã補åã®ãªãã¬ã€ã¹ãããã·ã³ã®ã¹ããã¯ãäžãããšããä»ã®ææ®µã«ããæ¹ãããå Žåãå€ãã¯ãã
å人çã«MySQLããPostgreSQLãªã©ãžããšãã£ã¿ã®çœ®æåŠçã§æ¹èšã倿ããŠç§»è¡ããããšã¯ãããŸãããSQLèšèªã®æ¹èšåžåãæåã§ãããããO/RããããŒã®ã©ã€ãã©ãªããŸãã£ãšå€æŽããããïŒãã®æã¯O/MããããŒãæ¹èšãåžåã§ããªãã£ãïŒãå šé¢çã«ãã¹ãããæéçãªã³ã¹ãã®ã»ããå€§å¹ ã«ããããŸãã
ãããã£ãŠãO/RããããŒã䜿ã£ããšããšäœ¿ããªãã£ãæã®ã³ã¹ãã¯ããŸãå€ãããŸããã
ïŒRDBMSïŒããã«ãŠã§ã¢ãšã¢ããªã±ãŒã·ã§ã³ã®ççµåæ§ãèãã«ããŠããããšããæ°ã¯ãããŸãããããããéèŠèŠããããããªãã°ãä»ã«æ°ã«ãã¹ãããšãããã®ã§ã¯ïŒãšçµéšçã«æããŸãã
ããã°ã©ã å ã®ããŒã¿ã¢ã¯ã»ã¹ãçµ±äžããïŒïŒïŒ
ãORMã§æžããªãå Žåã¯SQLãæžãå¿ èŠããããŸãããšããã£ãšèšã人ãããŸãããããã¯ORMã®ã¡ãªããã§ããççµåæ§ãèãã«ããŠãããšæãã®ã§ããâŠãã®ãžãã®ççŸãORM奜ããªãªããžã§ã¯ãæååç䞻矩è ã¯åŠå®ããªããã§ããããïŒ
â»äœè«ãããããŸããããããŒãã«åãšã«ã©ã åã宿°åãããŠãããªã¬ãªã¬ORMãèŠããããšããããŸãããã«ã©ã åã¯ãšãããããŒãã«åã£ãŠå€ãããŸããïŒïŒïŒãããŒãã«ã¯ãªããžã§ã¯ãã§ããããªããžã§ã¯ãåãå€ããïŒããŒã¿æ§é ãå€ããããšã§ããµã€ããªãããããŸãããããããããšããããšããã°ãªããžã§ã¯ãå倿Žã§ã¯ãªãããªããžã§ã¯ãåé€ãæ°èŠäœæã«ãªãã¯ãããªããžã§ã¯ãããªããžã§ã¯ãåã¯æ®éçãªãã®ãªã®ã§ããŸãå€ãããŸããã
ORMã®ã¡ãªããïŒïŒïŒ
äžåãªãïŒ
â»ïŒè¡ã§ããŒã¿ããšããã®ã§èšè¿°ãæžããããšããSQLãç¥ããªããŠãããŒã¿ããšãããšããããããã®ã¯ãã ã®ããŒã¿ååŸãã¡ãœããã«ããæœè±¡åããã ãã§ãã€ã³ãŒã«ORMãæå³ããŸããã
çµè«ïŒïŒïŒ
ã¯ããããçµè«ãããã§æçž®ã§ããããã¯ããO/RããããŒã¯çŸå®³ãã£ãŠäžå©ãªãïŒã
ãããã«
âŠãšã¯èšã£ãŠããäžã®äžã¯ORMã ãããªã®ã§ç¡èŠã¯ã§ããŸãããã§ããWEBã¢ããªéçºã®ååŠè ã¯ãORMã®ã¡ãœããã§ããŒã¿ããŒã¹æäœãããŠãããã§ãããåŸã§SQLã¯ãã¡ããšåŠã³ãŸããããSQLæäœãåãããã«å°ãããšããåŸã§ãã¶ãããŸãã
SQLã¯å¯èªæ§ãé«ãããã§ãåŠçãéãããã§ããããŸããã
äœã«ã§ãäžé·äžçã¯ãããŸãããä»åŸã¯ãã£ãšãããã©ãã€ã ãåºãŠããããšãé¡ã£ãŠïŒãŸãã¯åœäºè ãšããŠãè§£æ±ºã«æ±ãæµããŠåé¡ã«åãçµãã«ããïŒSQLãããŸã䜿ãããªããŸãããã