MVCãŒãªãœé–“é•ã£ã¦ã„ã‚‹ã‹ï¼Ÿ
Webシステムã«MVCã‚’é©ç”¨ã™ã‚‹ã®ã¯é–“é•ã£ã¦ã„ã¾ã™ï¼ˆæ£ç¢ºã«ã¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ãŒè¶³ã‚Šã¾ã›ã‚“)。
ã“ã®ã‚ˆã†ã«æ€è€ƒåœæ¢ã—ãŸã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ã«ã¯ã‚ã‹ã‚‰ãªã„ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ãŒã€ã‚‚ã†ä¸€åº¦è§£èª¬ã—ã¦ã¿ã¾ã—ょã†ã€‚
目次
- 目次
- ãã‚‚ãã‚‚MVCã¨ã¯ï¼Ÿ
- æ´å²ã‚’振り返ã£ã¦ã¿ã¾ã—ょã†
- インピーダンスミスマッãƒã¨ORMã®ç™»å ´ï¼
- ã“ã†ã‚ã‚‹ã¹ãã§ã—ょã†ï¼Ÿ
- ストアドプãƒã‚·ãƒ¼ã‚¸ãƒ£ã«ã™ã‚‹ã“ã¨ã«å•é¡Œã¯ãªã„ã®ï¼Ÿ
- Fetch ã—ã¦ã‚°ãƒ«ã‚°ãƒ«ã—ãªã„
- æ–‡å—列連çµã¯è¦ã‚‰ãªã„
- ã©ã¡ã‚‰ãŒæ¥µç«¯ã§ã™ã‹ï¼Ÿ
- 分離開発ã™ã‚‹ã¹ã
ãã‚‚ãã‚‚MVCã¨ã¯ï¼Ÿ
MVCã¯ã€ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒãƒ¼å‘ã‘ã®ãƒ—ãƒã‚°ãƒ©ãƒ ãŒã‚ã¾ã‚Šã«ãã¡ã‚ƒãã¡ã‚ƒã ã£ãŸã®ã§ã€ã€Œé•ã†æ©Ÿèƒ½ã¯ç–Žçµåˆã«ã—よã†ï¼ã€ã¨ã„ã†è€ƒãˆã§ä½œã‚Šå‡ºã•ã‚Œã¾ã—ãŸã€‚ 1980年代ã®é ƒã®ãŠè©±ã§ã™ã€‚ ãれ自体ã¯æ£ã—ã„ã§ã™ã€‚
æ´å²ã‚’振り返ã£ã¦ã¿ã¾ã—ょã†
Webシステムを「MVCã«é©ç”¨ã•ã›ã‚ˆã†ã€ã¨è¨€ã‚れ出ã—ãŸã®ã¯2000å¹´é ƒã‹ã‚‰ã§ã™ã€‚
ã“ã®è¾ºã‚Šã‚’ç†è§£ã™ã‚‹ã«ã¯ã€å°‘ã—æ´å²ã‚’知る必è¦ãŒã‚ã‚Šã¾ã™ã€‚
1995å¹´é ƒï¼ˆç§ã®æ–°äººæ™‚代)ã«JavaãŒç”Ÿã¾ã‚Œã¾ã—ãŸãŒã€å½“時ã¯Javaã‚’Webã§ä½¿ã†ã®ã¯Appletã§ã—ãŸï¼ˆã¯ã£ãり言ã£ã¦ä½¿ã„物ã«ãªã‚Šã¾ã›ã‚“ã§ã—ãŸï¼‰ã€‚ 1995~2000å¹´ã«ã‹ã‘ã¦ã€Y2K(2000å¹´å•é¡Œï¼‰ãŒèµ·ãã¾ã—ãŸã€‚ COBOLã§ã¯ã€è¥¿æš¦ã‚’2æ¡ã§ä¿å˜ã™ã‚‹ã“ã¨ãŒä¸€èˆ¬çš„ã ã£ãŸãŸã‚ã€ã€Œ2000年以é™ã‚·ã‚¹ãƒ†ãƒ ãŒå‹•ã‹ãªããªã‚‹ã€ã¨ã„ã†å•é¡Œã§ã€ã‚·ã‚¹ãƒ†ãƒ を改修ã™ã‚‹ã‹ã€ã‚¯ãƒ©ã‚µãƒã§ä½œã‚Šç›´ã™ã‹ã€ã„ãšã‚Œã‹ãŒé¸æŠžã•ã‚Œã€ã‚¯ãƒ©ã‚µãƒã‚·ã‚¹ãƒ†ãƒ ãŒãŸãã•ã‚“作られるã“ã¨ã«ãªã‚Šã¾ã—ãŸã€‚ ã“ã®ã¨ãRDBMSãŒãƒ¡ã‚¸ãƒ£ãƒ¼ã«ãªã‚Šã€äººæãŒè¶³ã‚Šã¾ã›ã‚“ã‹ã‚‰COBOLerãŒå¤§é‡ã«æµå…¥ã—ã¦ãã¾ã—ãŸã€‚
イベントドリブンãŒåˆ†ã‹ã‚‰ãªã„COBOLerãŒã€ä»•æ§˜ã‚’決ã‚ãŸã‚Šã€ã‚³ãƒ¼ãƒ‰ãƒ¬ãƒ“ューをã™ã‚‹ã‚ˆã†ãªä¸Šã®ç«‹å ´ã«ã„ã‚‹ã‚ã‘ã§ã™ã€‚ 本当ã«æ··æ²Œã¨ã—ãŸæ™‚代ã§ã—ãŸã€‚
ã“ã®ã¨ãCOBOLeré”ã¯ã€ã€ŒRDBMSã¯ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã€SQLã¯ãƒ•ã‚¡ã‚¤ãƒ«ã®èªã¿æ›¸ãã‚’ã™ã‚‹æ–¹è¨€ã€ã¨ã‚„ã‚ŠéŽã”ã—ã¾ã—ãŸã€‚
イベントドリブンãŒåˆ†ã‹ã‚‰ãªã„上ã«ã€ã€Œä¿ºãŒåˆ†ã‹ã‚‰ã‚“ã‹ã‚‰é…列ã¯ç¦æ¢ã€ã¨ã‹è¨€ã„出ã™äººãŒãŸãã•ã‚“ã„ã¾ã—ãŸã‹ã‚‰ã€ç§ãŸã¡åˆ†ã‹ã£ã¦ã„る世代ã¯ã€ã¾ãšã¯SQL以外ã®ä¸æ¯›ãªãƒãƒˆãƒ«ã‚’繰り広ã’ã‚‹å¿…è¦ãŒã‚ã‚Šã€SQLã¾ã§æ‰‹ãŒå›žã‚‰ãªã‹ã£ãŸã®ã§ã™ã€‚
çµæžœã€ã€ŒRDBMSã¯ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã€SQLã¯ãƒ•ã‚¡ã‚¤ãƒ«ã®èªã¿æ›¸ãã‚’ã™ã‚‹æ–¹è¨€ã€ã¨ã„ã†ã®ãŒæ–‡åŒ–ã¨ã—ã¦æ®‹ã£ã¦ã—ã¾ã£ãŸã®ã§ã™ã€‚
2000年以å‰ã¯ã€ãƒ–ラウザãŒCSSã«å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“ã§ã—ãŸã€‚ HTML自体ãŒãƒ‡ã‚¶ã‚¤ãƒ³ã‚’分離ã§ãã¦ã„ã¾ã›ã‚“ã§ã—ãŸã‹ã‚‰ã€Webシステムã§MVCã‚’å”±ãˆã‚‹ã“ã¨ã‚‚事実上無ç†ã§ã—ãŸã€‚
2000å¹´ã«ãªã‚Šãƒ‰ãƒƒãƒˆã‚³ãƒ ãƒãƒ–ルã®ä¸ã§ã€Servletã€JSPã€CSS(ãŒä½¿ãˆã‚‹ãƒ–ラウザ)ãªã©ãŒç”Ÿã¾ã‚Œã¾ã™ã€‚
Viewを分離ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã£ã¦ã€ã€ŒMVCã«ã—よã†ãœã€ã¨ã„ã†æµã‚ŒãŒã§ãã‚‹ã®ã§ã™ã€‚
ã“ã®æµã‚Œè‡ªä½“ã¯é–“é•ã„ã§ã¯ã‚ã‚Šã¾ã›ã‚“ãŒã€æ®‹å¿µãªãŒã‚‰ã€ã€ŒRDBMSã¯ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã€SQLã¯ãƒ•ã‚¡ã‚¤ãƒ«ã®èªã¿æ›¸ãã‚’ã™ã‚‹æ–¹è¨€ã€ã¨ã„ã†COBOLerã®éºä¼åã¯æ®‹ã£ã¦ã—ã¾ã„ã¾ã—ãŸã€‚
インピーダンスミスマッãƒã¨ORMã®ç™»å ´ï¼
MVCã‚’é©ç”¨ã—ã¦ã„ãä¸ã§ã€ã€Œã‚¤ãƒ³ãƒ”ーダンスミスマッãƒã€ã¨ã„ã†ã“ã¨ãŒè¡¨é¢åŒ–ã•ã‚Œã¦ã„ãã¾ã™ã€‚
ã“れを解決ã™ã‚‹ãŸã‚ã«ã€ORMãªã‚‹ã‚‚ã®ãŒé–‹ç™ºã•ã‚Œã¾ã—ãŸã€‚
ã•ã¦ã€ã“ã®å›³ã‚’ã—ã£ã‹ã‚Šè¦‹ã¦ã¿ã¾ã—ょã†ã€‚Viewã«ã¯ã€CSSã€JavaScriptãªã©ã€Webサーãƒï¼ˆãƒ–ラウザ)ãŒç®¡è½„ã™ã‚‹ã‚‚ã®ã¨ã€APサーãƒãŒç®¡è½„ã™ã‚‹ã‚‚ã®ãŒã‚ã‚Šã¾ã™ã€‚
Controlã¯ã€APサーãƒã«é™å®šã•ã‚Œã¾ã™ã€‚
Modelã¯ã€APサーãƒã¨ã€DBサーãƒã«åˆ†ã‹ã‚Œã¾ã™ãŒã€ãªãœã‹SQLã¯APサーãƒã®ç®¡è½„ã«ãªã£ã¦ã„ã¾ã™ã€‚ PHP(Eloquent)Ruby(ActiveRecord)ãªã©ã§è¦†ã£ã¦ã‚‚ã€ç§ã‹ã‚‰è¦‹ã‚Œã°ã€ã‚ªãƒ–ジェクト指å‘言語的ã«ã¯ã€Œç•°ç‰©ã€ä»¥å¤–ã«è¡¨ç¾ã—よã†ãŒã‚ã‚Šã¾ã›ã‚“。 ORMを使ã£ãŸã‚½ãƒ¼ã‚¹ã¯ã€ã‚ªãƒ–ジェクト指å‘言語的ã«ã‚‚ã®ã™ã”ã汚ã„ソースã«ã—ã‹è¦‹ãˆãªã„ã®ã§ã™ãŒâ€¦â€¦ã€‚ ãã‚Œã«ã€ORMã®æ©Ÿèƒ½ã‚’Viewã«å½“ã¦ã¯ã‚ã¦è€ƒãˆã‚Œã°ã€ã€ŒPHPã§æ›¸ã‘ã°JavaScriptã€CSSを自動生æˆã—ã¦ãれるã€ãらã„奇妙ãªæ§‹é€ ã«ãªã£ã¦ã„ã¾ã™ã€‚
ã“れを奇妙ã¨æ€ã‚ãªã„人ã¯ã€ã€ŒRDBMSã¯ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã€SQLã¯ãƒ•ã‚¡ã‚¤ãƒ«ã®èªã¿æ›¸ãã‚’ã™ã‚‹æ–¹è¨€ã€ã¨ã„ã†COBOLerãŒä½œã£ãŸæ–‡åŒ–を引ã継ã„ã§ã„ã‚‹ã‹ã‚‰ã§ã™ã€‚
ã“ã†ã‚ã‚‹ã¹ãã§ã—ょã†ï¼Ÿ
ã¾ã£ãŸã逆ã®ã‚¢ãƒ¼ã‚テクãƒãƒ£ã§ã‚ã‚‹SQLã‚’APサーãƒã§å®Ÿè¡Œã•ã‚Œã‚‹Modelã«å…¥ã‚Œã‚‹ã¨ã„ã†ã“ã¨ã«ç„¡ç†ãŒã‚る。 オブジェクト指å‘ã‚’æ£ã—ãç†è§£ã—ã¦ã„ã‚Œã°ã€ã•ã‚‰ã«ã€ã€Œé•ã£ãŸæ©Ÿèƒ½ã¯ç–Žçµåˆã«ã™ã‚‹ã€ã¨ã„ã†MVCã®ç†å¿µã‚’ç†è§£ã—ã¦ã„ã‚Œã°ã€DBサーãƒã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’ç½®ãå¿…è¦ãŒã‚ã‚‹ã¨åˆ†ã‹ã‚‹ã¯ãšã§ã™ã€‚
DBサーãƒã«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚’ç½®ãã¨ã—ã¦ã€RDBMSã®ãƒ¡ãƒ¢ãƒªãƒ¼ç©ºé–“ã§ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã¨ã—ã¦æ‰±ãˆã‚‹ã®ã¯ã‚¹ãƒˆã‚¢ãƒ‰ãƒ—ãƒã‚·ãƒ¼ã‚¸ãƒ£ã«ãªã‚Šã¾ã™ã€‚ ã¤ã¾ã‚Šã€ã€ŒAPIã¨ã—ã¦ã‚¹ãƒˆã‚¢ãƒ‰ãƒ—ãƒã‚·ãƒ¼ã‚¸ãƒ£ã‚’使ã†ã¹ãã€ã¨ã„ã†çµè«–ã«ãªã‚‹è¨³ã§ã™ã€‚
ãã†ãªã‚‰ãªã„ã®ã¯è‡ªåˆ†ã®ã‚¹ã‚ルã§ã€ã€Œã§ãる・ã§ããªã„ã€ã‹ã‚‰ã‚¹ã‚¿ãƒ¼ãƒˆã—ã¦ã„ã‚‹ã‹ã‚‰ã§ã™ã‚ˆã?
ストアドプãƒã‚·ãƒ¼ã‚¸ãƒ£ã«ã™ã‚‹ã“ã¨ã«å•é¡Œã¯ãªã„ã®ï¼Ÿ
ã‚‚ã¡ã‚ã‚“ã€å•é¡Œã¯ã‚ã‚Šã¾ã™ã€‚ ã™ã¹ã¦ã‚¹ãƒˆã‚¢ãƒ‰ãƒ—ãƒã‚·ãƒ¼ã‚¸ãƒ£ã«ã™ã‚‹ã«ã¯ã€ç¾çŠ¶ã®ä¸€èˆ¬çš„ãªã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ãŒæŒã£ã¦ã„ã‚‹SQLを書ãスã‚ルã§ã¯å…¨ã足りã¾ã›ã‚“。
ã»ã¨ã‚“ã©ã®ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ã¯ã€SQLã«ãŠã„ã¦StaticãŠã˜ã•ã‚“よりã²ã©ã„ã‹ã‚‰ã§ã™ã€‚
ã“ã®å•é¡Œã¯SQLã®ã‚¹ã‚ルを端的ã«æ¸¬ã‚Œã¾ã™ã€‚ 基本構文ã®å•é¡Œã§ã™ã‹ã‚‰ã€ã“れを間é•ã†äººã§RDBMSã«ä¿‚ã£ã¦ãƒ—ãƒã¨ã—ã¦ãŠé‡‘ã‚’è²°ã†ã®ã¯è©æ¬ºã¨è¨€ã£ã¦ã‚‚良ã„ã‘ã‚Œã©ã€ã„ã‚ã‚“ãªã¨ã“ã‚ã§ã‚„ã£ã¦ã‚‚らã„ã¾ã—ãŸãŒæ£è§£çŽ‡ã¯5ï¼…ãらã„ã§ã™ã€‚StaticãŠã˜ã•ã‚“を批判ã—ã¦ã„る本人ãŒã€StaticãŠã˜ã•ã‚“よりã¯ã‚‹ã‹ã«å•é¡Œã®ã€ŒLEFT JOIN決ã‚打ã¡ã€ã‚’ã‚„ã£ã¦ã„ã¾ã™ã€‚
世界10億サイト(ページã˜ã‚ƒãªã„よ)ã§ä½¿ã‚ã‚Œã¦ã„ã‚‹WordPressã®å¤‰æ›ã‚’見ã¦ã‚‚分ã‹ã‚‹é€šã‚Šã€æ—¥æœ¬ã ã‘ã§ã¯ãªã世界的ã«åˆ†ã‹ã£ã¦ã„ã¾ã›ã‚“。
Fetch ã—ã¦ã‚°ãƒ«ã‚°ãƒ«ã—ãªã„
スã‚ルãŒè¶³ã‚Šãªã„人ã«ã¨ã£ã¦ã¯ã€ã‚¹ãƒˆã‚¢ãƒ‰ãƒ—ãƒã‚·ãƒ¼ã‚¸ãƒ£ã«ã™ã‚‹ã¨è¨€ã†ã¨ã€
「ストアドプãƒã‚·ãƒ¼ã‚¸ãƒ£ã¿ãŸã„ãªå®Œæˆåº¦ã®ä½Žã„言語(ã‚ã£ã¡ã‚ƒä½Žã„)㧠Fetch ã—ã¦ã‚°ãƒ«ã‚°ãƒ«ã—ãŸã‚‰ã‚ã£ã¡ã‚ƒå¤§å¤‰â€¦â€¦ã€
ã¨è€ƒãˆã‚‹ã®ã§ã—ょã†ã€‚
確ã‹ã«ã‚¹ã‚ルãŒè¶³ã‚Šãªã„人ãŒã€ã€ŒFetch ã—ã¦ã‚°ãƒ«ã‚°ãƒ«ã™ã‚‹ã€ã‚ˆã†ãªã“ã¨ã‚’ã—ãŸã‚‰ã‚·ã‚¹ãƒ†ãƒ ã¯ä¸€çž¬ã§ç ´ç¶»ã—ã¾ã™ã€‚
弊社ã§åŸºå¹¹ã‚·ã‚¹ãƒ†ãƒ ã‚’ã™ã¹ã¦ã‚¹ãƒˆã‚¢ãƒ‰ãƒ—ãƒã‚·ãƒ¼ã‚¸ãƒ£ã§è£½é€ ã™ã‚‹ã¨ã€ã‚‚ã¡ã‚ã‚“ã€ã¾ã£ãŸãFetchã—ãªã„ã‚ã‘ã§ã¯ã‚ã‚Šã¾ã›ã‚“ãŒã€Fetchã™ã‚‹ã®ã¯1ï¼…ãらã„ã§ã™ã€‚ SQLã®ã‚¹ã‚ルãŒã‚ã‚Œã°ã€Fetchã—ãªã„ã¨ã„ã‘ãªã„処ç†ã¯ã»ã¨ã‚“ã©ã‚ã‚Šã¾ã›ã‚“。
例ãˆã°ã€åŸºå¹¹ã‚·ã‚¹ãƒ†ãƒ ã§Fetchã™ã‚‹æ©Ÿèƒ½ã«ã¯ã€è«‹æ±‚書を作る機能ãŒã‚ã‚Šã¾ã™ã€‚ ã¨è¨€ã£ã¦ã‚‚ã€å¾—æ„先コードを指定ã—ã¦è«‹æ±‚書を作る処ç†ã¯Fetchã™ã‚‹å¿…è¦ã¯ã‚ã‚Šã¾ã›ã‚“。 ã—ã‹ã—ã€ç· ã‚日を指定ã—ã¦ä¸€æ‹¬ã§è«‹æ±‚æ›¸ã‚’ä½œã‚‹å ´åˆã€æŒ‡å®šã•ã‚ŒãŸç· ã‚æ—¥ã®å¾—æ„å…ˆã®ä¸€è¦§ã‚’å–å¾—ã—ã€å…ˆã»ã©ã®å¾—æ„先コードを指定ã—ã¦è«‹æ±‚書を作るストアドプãƒã‚·ãƒ¼ã‚¸ãƒ£ã«Fetchã—ã¦æ¸¡ã—ã¾ã™ã€‚
ãã†ã„ã†ã‚‚ã®ã‚’æ•°ãˆã¦ã‚‚1ï¼…ãらã„ã§ã™ã€‚
「得æ„先コードを指定ã—ã¦ã€1件分ã®è«‹æ±‚書を作るã ã‘ãªã‚‰Fetchã—ãªã„ã§SQLã§å‡¦ç†ã§ãã‚‹ã€
ã¨ã„ã†ã‚¹ã‚ルãŒå¿…è¦ã§ã™ã€‚ ãã®ã‚¹ã‚ルãŒçŒ›çƒˆã«é«˜ã„ã‹ã¨ã„ã†ã¨ã€ç¾çŠ¶ã§ã¯é«˜ã„ã§ã—ょã†ã€‚ ã—ã‹ã—ã€å¼Šç¤¾ã®ã‚»ãƒŸãƒŠãƒ¼ã§ã¯ã€ãƒ—ãƒã‚°ãƒ©ãƒŸãƒ³ã‚°æœªçµŒé¨“ã®äº‹å‹™å“¡ã•ã‚“ãŒ3日もã‚ã‚Œã°ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
æ–‡å—列連çµã¯è¦ã‚‰ãªã„
「ストアドプãƒã‚·ãƒ¼ã‚¸ãƒ£ã¿ãŸã„ãªå®Œæˆåº¦ã®ä½Žã„言語(ã‚ã£ã¡ã‚ƒä½Žã„)ã§æ–‡å—列連çµã—ã¦SQLを構築ã™ã‚‹ãªã‚“ã¦â€¦â€¦ã€
ã¨æ€ã†äººã‚‚ã„ã‚‹ã®ã§ã—ょã†ã€‚ å…ˆã»ã©ã®è«‹æ±‚書を作æˆã™ã‚‹SQLãªã©ã€ã¨ã¦ã‚‚複雑ãªå‡¦ç†ã‚’ã—ã¦ã„ã¾ã™ãŒã€æ–‡å—列連çµã§SQLを構築ã™ã‚‹ã“ã¨ã¯å¼Šç¤¾ã§ã¯ã»ã¼ã‚ã‚Šã¾ã›ã‚“。 ã“ã¡ã‚‰ã«è©³ã—ã書ãã¾ã—ãŸã€‚
ã©ã¡ã‚‰ãŒæ¥µç«¯ã§ã™ã‹ï¼Ÿ
「ã™ã¹ã¦ã‚¹ãƒˆã‚¢ãƒ‰ãƒ—ãƒã‚·ãƒ¼ã‚¸ãƒ£ã«ã™ã‚‹ã¹ãã€ã¨ã„ã†ã¨ã€æ¥µç«¯ã ã¨è¨€ã‚ã‚Œã¾ã™ãŒã€ã©ã¡ã‚‰ãŒæ¥µç«¯ã§ã™ã‹ï¼Ÿ
ã¾ã£ãŸã真逆ã®ã‚¢ãƒ¼ã‚テクãƒãƒ£ãƒ¼ã§ã‚ã‚‹SQLã‚’ã€ã‚ªãƒ–ジェクト指å‘言語ã®ä¸ã§å‹•çš„生æˆã™ã‚‹ã€‚ 冷é™ã«è€ƒãˆã‚Œã°ã€ãã‚“ãªæ¥µç«¯ãªã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“。
ã»ã¨ã‚“ã©ã®RDBMSã¯ã€ã‚ªãƒ–ジェクト指å‘言語ã®C++ã§æ›¸ã‹ã‚Œã¦ã„ã¾ã™ã€‚ CPUã¯SQLãªã‚“ã¦ç†è§£ã§ãã¾ã›ã‚“ã‹ã‚‰ã€ã‚ªãƒ–ジェクト指å‘言語ã§æ›¸ã‹ã‚ŒãŸRDBMSãŒç¿»è¨³ã‚’ã—ã¦ã„ã‚‹ã®ã§ã™ã€‚
翻訳ã•ã‚ŒãŸçµæžœã¯ã€ã€Œå®Ÿè¡Œè¨ˆç”»ã€ã¨ã—ã¦è¦‹ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
åŒã˜SQLã§ã‚‚ã€å®Ÿè¡Œè¨ˆç”»ãŒå¤‰ã‚ã‚‹SQLã®ä¾‹ã€‚
実行計画をオブジェクト指å‘言語ã«ç›´ã™ã¨ã“ã‚“ãªæ„Ÿã˜ã«ãªã‚Šã¾ã™ã€‚
SQL → 実行計画 → オブジェクト指å‘言語
ã¨ã„ã†å¤‰æ›ãŒã§ãるよã†ã«ãªã‚Œã°ï¼ˆã¨ã„ã†ã‹ã€ãã‚ŒãŒã§ããªã„人ãŒã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ã§è‰¯ã„ã®ã‹ï¼Ÿï¼‰
オブジェクト指å‘言語 → SQL(自動生æˆï¼‰â†’ オブジェクト指å‘言語(自動生æˆï¼‰
ã¨ã„ã†ã€å®Ÿè¡Œæ™‚ã«ã€Œè»Šè¼ªã®å†é–‹ç™ºã€ãŒèµ·ãã¦ã„ã¦ã‚‚「便利ã ã€ã¨æ¥µç«¯ãªã“ã¨ã‚’考ãˆã‚‹ã¯ãšãŒãªã„ã§ã™ã€‚ ãã‚“ãªã“ã¨ã‚’考ãˆã¦ã—ã¾ã†ã®ã¯ã€ã€ŒSQLã®ã‚¹ã‚ルãŒåœ§å€’çš„ã«è¶³ã‚Šãªã„ã€ã“ã¨ã‚’証明ã—ã¦ã„ã‚‹ã ã‘ã®è©±ã§ã™ã€‚
分離開発ã™ã‚‹ã¹ã
SQLã¨ã‚ªãƒ–ジェクト指å‘言語ã¯ã€çœŸé€†ã®ã‚¢ãƒ¼ã‚テクãƒãƒ£ã§ã™ã€‚ ç§ã¯ã©ã¡ã‚‰ã‚‚åŒã˜ã«ã§ãã¾ã™ãŒã€ãã‚Œã§ã‚‚åŒæ™‚ã«è€ƒãˆã‚‹ã®ã¯å›°é›£ã§ã™ã€‚
ã“ã‚Œã ã‘SQLãŒã§ããªã„エンジニアãŒã„ã‚‹ã®ã§ã™ã‹ã‚‰ã€SQLを担当ã™ã‚‹ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ã¨ã€ã‚ªãƒ–ジェクト指å‘言語を担当ã™ã‚‹ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ã‚’分ã‘ãŸæ–¹ãŒã‚ˆã„。 ストアドプãƒã‚·ãƒ¼ã‚¸ãƒ£ã«ã™ã‚Œã°ãã‚ŒãŒå¯èƒ½ã«ãªã‚‹ã®ã§ã™ã€‚
SQLã¨ã€ã‚ªãƒ–ジェクト指å‘言語を担当ã™ã‚‹ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ãŒåˆ†ã‹ã‚Œã‚Œã°ã€ã‚ªãƒ–ジェクト指å‘言語を担当ã™ã‚‹ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ã¯SQLを知る必è¦ã‚‚ãªã„。
ç¾çŠ¶ã§ã¯ã€å…¨å“¡ãŒSQLã‚’ç†è§£ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚る。 ãã‚“ãªæ¥µç«¯ãªã“ã¨ã¯ã‚„ã‚ãŸæ–¹ãŒè‰¯ã„ã§ã—ょã†ã€‚
プãƒãƒãƒ¼ã‚°ç‰ˆã€ŒSQLã®è‹¦æ‰‹ã‚’å…‹æœã™ã‚‹ã€ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ã‚»ãƒŸãƒŠãƒ¼
以å‰ã‚ˆã‚Šè¡Œã£ã¦ãŠã‚Šã¾ã—ãŸã€ŒSQLã®è‹¦æ‰‹ã‚’å…‹æœã™ã‚‹ã‚»ãƒŸãƒŠãƒ¼ã€ã®ã‚ªãƒ³ãƒ©ã‚¤ãƒ³ç‰ˆã‚’作りã¾ã—ãŸã€‚
ã“ã®ã‚»ãƒŸãƒŠãƒ¼ã¯4時間以上ã‹ã‹ã‚‹ãŸã‚土日ã®é–‹å‚¬ã«ãªã‚‹ã®ã§ã™ãŒã€å‰åŠã®å†…容をプãƒãƒãƒ¼ã‚°ç‰ˆã¨ã—ã¦9月30日(水曜日)19時より1時間30分~2時間程度ã§é–‹å‚¬ã„ãŸã—ã¾ã™ã€‚
オンラインセミナーã«ãªã‚Šã¾ã™ã‹ã‚‰ã€é æ–¹ã®æ–¹ã‚‚ã”å‚åŠ ãã ã•ã„。
よã‚ã—ããŠé¡˜ã„ã„ãŸã—ã¾ã™ã€‚
SQLã§æ¶ˆè²»ç¨Žã®å‡¦ç†
ã“ã¡ã‚‰ã§æ›¸ã„ãŸè¨˜äº‹ã®ã”æ„見ãŒæ°—ã«ãªã£ãŸã®ã§å°‘ã—。
目次
- 目次
- ã”æ„見
- テーブルè¨è¨ˆã«ãŠã‘る消費税率ã«ã¤ã„ã¦
- マスタ類ã®è¨è¨ˆä¾‹
- トランザクション類ã®è¨è¨ˆä¾‹
- 消費税率ã®ç™»éŒ²ã®ä»•æ–¹
- SQLã§å‡¦ç†ã™ã‚‹ã¨ã“ã†ãªã‚‹
- ゼãƒã«ã™ã‚‹ã¨ãã«ã¯ã€ã‚¼ãƒã‚’掛ã‘ã‚Œã°è‰¯ã„
- トランザクションã«ç¨ŽçŽ‡ã‚’入れるã‹ï¼Ÿ
ã”æ„見
> 99%ã¯åŒæ„ã™ã‚‹ãŒä¸€ã¤è¨€ã‚ã›ã¦ã»ã—ã„。SQLã®æœ€å¤§ã®å¼±ç‚¹ã¯æ™‚é–“ã®æ‰±ã„ã«å¼±ã„ã“ã¨ã§ã€RDBã®ç†è«–的基盤ã®æ•°å¦ãŒæ™‚間を考慮ã—ã¦ãªã„ã‹ã‚‰ã—ょã†ãŒãªã„ã¨ã¯ã„ãˆæ¶ˆè²»ç¨Žã¿ãŸã„ãªæ™‚é–“ã§å¤‰åŒ–ã™ã‚‹ãƒžã‚¹ã‚¿ã¸ã®é…æ…®ãŒç„¡ã•ã™ãŽã‚‹ã€‚
ã¨ã®ã“ã¨ã§ã™ãŒã€Window関数以å‰ã¯ã€å‰å¾Œã®ãƒ¬ã‚³ãƒ¼ãƒ‰ã®å‡¦ç†ãŒè€ƒæ…®ã•ã‚Œã¦ã„ã¾ã›ã‚“ã§ã—ãŸã€‚ç¾åœ¨ã¯ã€MySQLã§ã‚‚Window関数ãŒå®Ÿè£…ã•ã‚ŒãŸã®ã§ã€ã»ã¨ã‚“ã©ã®å•é¡Œã¯è§£æ±ºã•ã‚ŒãŸã¨æ€ã„ã¾ã™ã€‚
ã—ã‹ã—ã€æ¶ˆè²»ç¨ŽçŽ‡ã®å¤‰æ›´ç¨‹åº¦ã§ã‚ã‚Œã°ã€é€šå¸¸ã¯ãƒ†ãƒ¼ãƒ–ルã¨ãƒ‡ãƒ¼ã‚¿ã‚’æ•´å‚™ã™ã‚‹ã“ã¨ã§å‡¦ç†ãŒå¯èƒ½ã§ã™ã€‚
テーブルè¨è¨ˆã«ãŠã‘る消費税率ã«ã¤ã„ã¦
消費税ã§è€ƒæ…®ã™ã¹ã点ã¯ã€ç¨ŽçŽ‡ã¯ã€3種類(通常ã€è»½æ¸›ç¨ŽçŽ‡ã€éžèª²ç¨Žå“目)ã‚ã‚Šã€é¡§å®¢ï¼ˆè²©å£²ç›¸æ‰‹ï¼‰ã«2種類(課税対象ã€èª²ç¨Žå¯¾è±¡å¤–)ã‚ã‚‹ã“ã¨ã«ã‚ã‚Šã¾ã™ã€‚
税率ã«ã¤ã„ã¦ã¯ã€å•†å“ã®ã‚«ãƒ†ã‚´ãƒªãƒ¼ã«å¯¾ã—ã¦ç¨ŽçŽ‡ç¨®åˆ¥ã‚’付ã‘ã‚‹ã¹ãã§ã—ょã†ã€‚
マスタ類ã®è¨è¨ˆä¾‹
トランザクション類ã®è¨è¨ˆä¾‹
消費税率ã®ç™»éŒ²ã®ä»•æ–¹
éžèª²ç¨Žå“目やã€æ¶ˆè²»ç¨ŽãŒãªã‹ã£ãŸæ™‚代ã®ãƒ‡ãƒ¼ã‚¿ã¾ã§ç¨ŽçŽ‡ã‚’ゼãƒã§ç™»éŒ²ã—ã¦ãŠãã“ã¨ãŒãƒŸã‚½ã§ã™ï¼
SQLã§å‡¦ç†ã™ã‚‹ã¨ã“ã†ãªã‚‹
上ã®ã‚ˆã†ãªãƒ†ãƒ¼ãƒ–ルè¨è¨ˆã«ã—ã¦ã€æ¶ˆè²»ç¨ŽçŽ‡ã‚’登録ã—ã¦ãŠãã¨ã€SQLã§å‡¦ç†ã™ã‚‹ã¨ãã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
SELECT -- ä¸ç•¥ , ss.å˜ä¾¡ * ss.個数 * tm.税率 AS æ¶ˆè²»ç¨Žé¡ -- ä¸ç•¥ FROM 売上テーブル sm INNER JOIN 売上明細テーブル ss ON sm.ID = ss.売上ID INNER JOIN 顧客マスタ cm ON sm.顧客ID = cm.ID INNER JOIN 商å“マスタ pm ON ss.商å“ID = pm.ID INNER JOIN 商å“分類マスタ pc ON pm.商å“分類ID = pc.ID INNER JOIN 消費税率マスタ tm ON sm.売上日 >= tm.é©å¿œé–‹å§‹æ—¥ AND sm.売上日 <= tm.é©å¿œçµ‚了日 AND pc.消費税区分ID = tm.消費税区分ID WHERE -- 以下略 ;
CASEå¼ã™ã‚‰å…¥ã‚‰ãªã„ã¨ã„ã†ã“ã¨ã«æ³¨ç›®ã—ã¦ãã ã•ã„。
ゼãƒã«ã™ã‚‹ã¨ãã«ã¯ã€ã‚¼ãƒã‚’掛ã‘ã‚Œã°è‰¯ã„
ã“ã®ãƒ–ãƒã‚°ã§ã‚‚ã€ä½•åº¦ã‹æ›¸ã„ã¦ã„ã¾ã™ãŒã€
・ゼãƒã‚’å¾—ãŸã„ã¨ãã«ã‚¼ãƒã‚’掛ã‘ã‚‹
・変化ãªã—ã‚’å¾—ãŸã„ã¨ãã«ã‚¼ãƒã‚’足ã™ã€ã‚ã‚‹ã„ã¯1を掛ã‘ã‚‹
ãªã©ã®å‡¦ç†ã¯ã€è‡ªç„¶è¨€èªžã§ã¯è¡Œã‚ã‚Œãªã„表ç¾ã§ã™ãŒã€æ•°å¼ã«ã™ã‚‹ã¨ãã«å·¥å¤«ã™ã¹ãã§ã™ã€‚
ã¤ã¾ã‚Šã€ä»•æ§˜ã‚’決ã‚ã‚‹ã¨ãã€
「顧客ãŒèª²ç¨Žå¯¾è±¡ã®ã¨ãã¯ç¨ŽçŽ‡åŒºåˆ†ã®ç¨ŽçŽ‡ã‚’é©ç”¨ã—ã€èª²ç¨Žå¯¾è±¡å¤–(海外ä¼æ¥ãªã©ï¼‰ã®ã¨ãã¯æ¶ˆè²»ç¨Žé¡ã‚’ゼãƒã¨ã™ã‚‹ã€
ãªã©ã¨ã„ã†ä¼šè©±ãŒãªã•ã‚Œã¾ã™ã€‚ãれをãã®ã¾ã¾ãƒ—ãƒã‚°ãƒ©ãƒ ã«ã™ã‚‹ã¨ã€ã¨ã¦ã‚‚複雑ãªå‡¦ç†ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚
消費税課税区分(åå‰ã¯èª²ç¨Žä¿‚æ•°ã®æ–¹ãŒè‰¯ã„ã‹ã‚‚)を0ã¨1ã«ã—ã¦ãŠã‘ã°ã€
å˜ä¾¡ * 個数 * 税率 * 消費税課税区分
ã¨ã„ã†å˜ç´”ãªæ•°å¼ã§ã€ã™ã¹ã¦ã®çµ„åˆã›ã®å‡¦ç†ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚
トランザクションã«ç¨ŽçŽ‡ã‚’入れるã‹ï¼Ÿ
税率ã¯é€šå¸¸ã¯å°Žå‡ºé …ç›®ã«ãªã‚Šã¾ã™ã€‚
ã—ã‹ã—ã€ç¨ŽçŽ‡ãŒå¤‰æ›´ã«ãªã‚‹å‰å¾Œã§ã€ç‰¹åˆ¥ã«å‰ã®ç¨ŽçŽ‡ã§å‡¦ç†ã—ã¦æ¬²ã—ã„ãªã©ã¨ã„ã†ã‚¤ãƒ¬ã‚®ãƒ¥ãƒ©ãƒ¼ãªã“ã¨ã‚’言ã„出ã™å¯èƒ½æ€§ãŒã‚ã‚‹ã¨ãã«ã¯ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã«éžæ£è¦åŒ–ã—ã¦ãŠã„ãŸæ–¹ãŒè‰¯ã„ã§ã—ょã†ã€‚
(売上日をå‰æ—¥ã«ã™ã¹ãã§ã™ã‘ã©ã)
MySQLã§ã‚µãƒ–クエリãŒã©ã†ã—ã¦ã‚‚é…ã„ã¨ãã®å¯¾å‡¦æ³•
ä»–ã®RDBMSã§ã‚‚èµ·ã“ã‚Šã¾ã™ãŒã€ç‰¹ã«MySQLã§ã¯ã€ã‚µãƒ–クエリを使ã†ã¨ã©ã†ã—ã¦ã‚‚é…ã„ã¨ããŒã‚ã‚Šã¾ã™ã€‚
ãã‚“ãªã¨ãã®å¯¾å‡¦æ³•ã¯ä¸»ã«2点ã‚ã‚Šã¾ã™ã€‚
目次
テンãƒãƒ©ãƒªãƒ¼ãƒ†ãƒ¼ãƒ–ルを使ã†æ–¹æ³•
DROP TEMPORARY TABLE IF EXISTS tmp1; CREATE TEMPORARY TABLE tmp1 -- (PRIMARY KEY(id)) å¿…è¦ã«å¿œã˜ã¦ä¸»ã‚ー -- (INDEX(id)) インデックスを生æˆã™ã‚‹ AS SELECT * FROM customer; -- 使ã„ãŸã‹ã£ãŸã‚µãƒ–クエリ -- é…ã‹ã£ãŸã‚¯ã‚¨ãƒªã®ã‚µãƒ–クエリを tmp1 ã«ã—ã¦æ›¸ãæ›ãˆã‚‹ã€‚ DROP TEMPORARY TABLE IF EXISTS tmp1;
æ–‡å—列連çµã§SQLを生æˆã™ã‚‹æ–¹æ³•
例ãˆã°ã€ä»¥ä¸‹ã®ã‚ˆã†ãªã¨ãã€col1ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’使ã£ãŸæ–¹ãŒæ—©ã„ã¨ãã§ã‚‚ã€ãƒ’ントを入れã¦ã‚‚使ã£ã¦ãã‚Œãªã„ã“ã¨ãŒã‚る。
SELECT * FROM table1 WHERE col1 IN (SELECT colx FROM table2 WHERE xxx) ;
対処法
SELECT colx FROM table2 WHERE xxx ;
ã‚’å…ˆã«å®Ÿè¡Œã—ã€çµæžœã‹ã‚‰
SELECT * FROM table1 WHERE col1 IN (1, 3, 5) ;
SELECT * FROM table1 WHERE col1 IN ('JPN', 'USA') ;
ãªã©ã®SQL文を生æˆã™ã‚‹ã€‚
é…列ãŒä½¿ãˆã‚‹DBã§ã‚‚ã€é…列を使ã£ãŸã‚‰ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’使ã‚ãªã‹ã£ãŸã‚Šï¼ˆå¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®è¨˜æ†¶ãªã®ã§ç¾åœ¨ã¯ã©ã†ã‹ï¼Ÿï¼‰ã™ã‚‹ã¨ãã«ã‚‚有効ã§ã™ã€‚
ゲームを題æã«å¦ã¶ å†…éƒ¨æ§‹é€ ã‹ã‚‰ç†è§£ã™ã‚‹MySQL
以å‰ã€Software Design ã®ç‰¹é›†è¨˜äº‹ã‚’執ç†ã—ã¾ã—ãŸãŒã€
技術評論社ã®ãƒšãƒ¼ã‚¸ã§ã™ã¹ã¦ç„¡æ–™ã§å…¬é–‹ã•ã‚Œã¦ã„ã¾ã™ã€‚
ãœã²ã€ã”覧ãã ã•ã„。
「SQLã®è‹¦æ‰‹ã‚’å…‹æœã™ã‚‹ã€ã‚»ãƒŸãƒŠãƒ¼
ãŠæ™‚é–“ãŒåˆã„ã¾ã—ãŸã‚‰ã”å‚åŠ ãã ã•ã„。
拙著『SQLã®è‹¦æ‰‹ã‚’å…‹æœã™ã‚‹æœ¬ã€ã®ã”案内
https://www.amazon.co.jp/gp/product/4297107171
ブãƒã‚°ã§æ›¸ã„ã¦ã„る内容をã€ã‚‚ã£ã¨åˆ†ã‹ã‚Šã‚„ã™ãã—ãŸã‚‚ã®ã§ã™ã€‚
例ãˆã°ã€ä»¥ä¸‹ã®è¨˜äº‹ã®å†…容もã€åˆ†ã‹ã‚Šã‚„ã™ã解説ã—ã¦ã„ã¾ã™ã€‚
「SQLã‚’æ–‡å—列連çµã—ã¦ä½œã‚‹å¿…è¦ã¯ãªã„ã€
ç§ã¯ã©ã†ã—ã¦ã‚‚ã€ã€Œè‡ªåˆ†ãŒç†è§£ã—ã¦ã„る範囲をエンジニアãªã‚‰ç†è§£ã—ã¦ã„ã‚‹ã ã‚ã†ã€ã¨ã„ã†æƒ³ã„ã§æ–‡ç« を書ã„ã¦ã—ã¾ã„ã¾ã™ã€‚ ã—ã‹ã—ã€ãã‚Œã§ã¯é›£è§£ã§ç†è§£ã§ããªã„エンジニアãŒå¤šã„ã¨ã„ã†ã“ã¨ã§ã€é–‹ç±³ç‘žæµ©ã•ã‚“ã«ç¬¬ä¸‰è€…ã«ã‚‚ã‚ã‹ã‚Šã‚„ã™ãリライトã—ã¦ã„ãŸã ã„ã¦ã„ã¾ã™ã€‚
是éžã€ã”購入ã„ãŸã ã‘ã‚Œã°å¹¸ã„ã§ã™ã€‚