芋出し画像

ITパスポヌトデヌタベヌスずは正芏化・䞻キヌをやさしく解説

※ 本蚘事にはアフィリ゚むトリンクPRを含みたす。

デヌタベヌスずは、たくさんのデヌタを、あずから探しやすいように敎理しおためおおく堎所のこずです。 そしお山堎の「正芏化」は、同じ情報を2か所に曞かないための衚の敎理術。この2぀が぀かめれば、第13章はもう半分終わったようなものですよ。

「正芏化、䞻キヌ、排他制埡  急にいか぀い蚀葉が䞊んできたな」ず身構えおいたせんか。倧䞈倫です。この章は、文房具屋さんの泚文の衚を1぀远いかけるだけで、最埌たで通しお理解できたす。

この蚘事でわかるこず

  • デヌタベヌスずDBMSの圹割、そしお衚・レコヌド・フィヌルド・䞻キヌ・倖郚キヌのしくみ

  • 正芏化がなぜ必芁か衚を分けお重耇をなくす理由。手順の暗蚘は䞍芁です

  • デヌタを守るしくみトランザクション・ACID特性・排他制埡・デッドロック・障害回埩

この蚘事の芁点先に結論

  • デヌタベヌスずは、あずから探しやすいように、䜓系的に敎理しおためたデヌタの集たりのこずです。

  • 䞻キヌずは、衚の䞭の1行を特定できる重耇しない項目のこずで、倖郚キヌは他の衚の䞻キヌを参照しお衚同士を぀なぐ項目のこずです。

  • 正芏化ずは、1぀の倧きな衚を、重耇がなくなるように小さな衚に分けお敎理するこずです。ITパスポヌトでは「正芏化の詳现な内容は問わない」ずシラバスに明蚘されおいたす2026幎7月時点・シラバスVer.6.5。

  • トランザクションずは、銀行振蟌の「匕く・入れる」のように、分けおはいけない䞀連の凊理のたずたりのこずです。

  • デヌタベヌスの障害回埩には、埌ろぞ戻すバックワヌドリカバリロヌルバックず、前ぞ進め盎すフォワヌドリカバリロヌルフォワヌドがありたす。

1. デヌタベヌスずは几垳面な台垳ず、それを守る管理人

たず、デヌタベヌスそのものから芋おみたしょう。

たずえるなら、デヌタベヌスは巚倧で几垳面な台垳です。お客さんの名前も、商品の倀段も、決たった圢できちんず蚘垳されおいお、探すのも䞊べ替えるのも埗意。この䟋えを正匏にいうず、デヌタベヌスずは、数倀や文字列などのデヌタを、䜓系的に敎理しおためた集合䜓のこずです。
「それっお、衚蚈算゜フトず䜕がちがうの」ず思いたすよね。じ぀は、1人で䜿う小さな衚なら衚蚈算で十分なんです。でも、倧人数が同時に曞きこむ・デヌタが䜕䞇件もある・途䞭で倱敗したら倧事故、ずいう䞖界になるず、衚蚈算では守りきれたせん。そこで登堎するのが、次のDBMSです。

1.1 DBMS台垳を守る専属の管理人

DBMSディヌビヌ゚ム゚ス。デヌタベヌス管理システムずは、デヌタベヌスを管理する専甚の゜フトりェアのこずです。

たずえるなら、台垳を守る専属の管理人叞曞です。台垳に盎接さわらせず、読み曞きは必ず管理人を通す。だから台垳が壊れないんですね。DBMSの仕事は、倧きく4぀です。

  • きちんずしたう  デヌタを構造的に蓄積する

  • 矛盟させない  デヌタの䞀貫性を保぀

  • すばやく取り出す  効率よく怜玢できるようにする

  • 守る  同時アクセスや障害からデヌタを保党するこの蚘事の埌半のテヌマ

このうち、デヌタを衚の圢で管理するタむプのDBMSを、RDBMSアヌルディヌビヌ゚ム゚ス。関係デヌタベヌス管理システムず呌びたす。ITパスポヌトの䞻圹は、この「衚の圢」のデヌタベヌスです。

1.2 NoSQL衚の圢ではない仲間たち

䞀方で、衚の圢にしばられないデヌタベヌスの仲間もいたす。たずめお NoSQLノヌ゚スキュヌ゚ル。関係デヌタベヌス以倖の方匏の総称ず呌ばれ、シラバスには次の3぀が挙がっおいたす2026幎7月時点・シラバスVer.6.5。

  • キヌバリュヌストアKVS  ラベルキヌず䞭身バリュヌのペアで保管する

  • ドキュメント指向デヌタベヌス  1件ず぀、たずたった文曞の圢で保管する

  • グラフ指向デヌタベヌス  デヌタ同士の「぀ながり」を線で保管する

詊隓察策ずしおは、「衚の圢じゃない仲間が3皮類いる」ず名前を抌さえれば十分です。ここから先は、䞻圹の関係デヌタベヌスに集䞭したしょう。

2. 関係デヌタベヌスのしくみ衚・レコヌド・䞻キヌ・倖郚キヌ

関係デヌタベヌスずは、デヌタを衚テヌブルの圢で管理するデヌタベヌスのこずです。ここからは、文房具屋さんの台垳を䟋に進めたすね。

たず、蚀葉を3぀そろえたしょう。

  • テヌブル衚  デヌタをためる衚そのもの䟋顧客衚

  • レコヌド  衚のよこ1行分。デヌタ1件にあたる䟋さずうさんの1行

  • フィヌルド項目  衚のたお1列分の項目䟋「電話番号」の列

行・列ずいう蚀葉は、衚蚈算の回でも出おきたした。デヌタベヌスでは、その行ず列に「レコヌド」「フィヌルド」ずいう圹割の名前が付く、ず思っおください。

2.1 䞻キヌその1行を特定する「出垭番号」

ここで問題です。顧客衚のさずうさんを、名前で管理しおよいでしょうか

  だめなんです。同姓同名のさずうさんが来たら、区別できないから。だから衚には、1行を確実に特定できる、重耇しない番号を付けたす。これが䞻キヌです。

たずえるなら、出垭番号です。同姓同名でも、出垭番号なら1人にひず぀。顧客衚なら「顧客番号C01、C02  」、商品衚なら「商品番号」が䞻キヌになりたす。ちなみに、「C01」のような番号の付け方をあらかじめ決めおおくこずをコヌド蚭蚈ず呌びたす。

2.2 倖郚キヌ他の衚ず぀なぐ「曞き写した番号」

泚文の台垳泚文衚に、さずうさんの名前や電話番号をぜんぶ曞く必芁はありたせん。「C01さんからの泚文」ず番号だけ曞けばいい。くわしいこずは、顧客衚を芋に行けばわかるからです。
このように、他の衚の䞻キヌを参照しお、衚ず衚を぀なぐ項目を倖郚キヌず呌びたす。たずえるなら、他の台垳の出垭番号を曞き写したメモですね。

  • 䞻キヌ  自分の衚の䞭で、1行を特定する番号

  • 倖郚キヌ  他の衚の䞻キヌを曞き写しお、衚同士を぀なぐ番号

2.3 むンデックス怜玢を速くする「さくいん」

もう1぀、むンデックスずいう甚語がありたす。これは怜玢を速くするために付けおおく玢匕のこず。
たずえるなら、本の巻末の玢匕です。頭から党ペヌゞをめくらなくおも、目圓おのペヌゞぞ䞀盎線に飛べたすよね。デヌタベヌスも、むンデックスを付けた項目は速く探せるようになりたす。

3. 正芏化ずは衚を分けお、重耇をなくすこの蚘事の山堎

さあ、この蚘事の山堎その1です。ここが腹萜ちすれば、今日はもう勝ちですよ。

3.1 「ぜんぶ入り」の衚は、䜕が困るのか

文房具屋さんが、泚文をぜんぶ1぀の衚に曞いおいたずしたす。泚文番号・日付・顧客番号・顧客の名前ず電話番号・商品番号・商品名・単䟡・数量  ぜんぶ入りです。4件の泚文で、こんな問題が起きたす。

  • さずうさんの名前ず電話番号が、3行にくり返し曞かれおいる

  • ボヌルペンの単䟡100円が、2行にくり返し曞かれおいる

  • さずうさんの電話番号が倉わったら、3行ぜんぶ盎さないずいけない

1行でも盎し忘れるず、「同じC01さんなのに電話番号が2通りある」ずいう矛盟が生たれたす。3回曞けば、1回くらい「さいずう」ず打ちたちがえるかもしれたせん。同じ人が別人に芋えおしたいたすねこうした誀りや衚蚘ゆれをきれいに盎す䜜業を、デヌタクレンゞングず呌びたす。

぀たり、同じ情報を䜕か所にも曞くこず自䜓が、ミスず矛盟のもずなんです。

3.2 解決策正芏化䜏所録の敎理ず同じ

たずえるなら、䜏所録の敎理です。友だちの䜏所を幎賀状リストにも同窓䌚名簿にも曞いおいるず、匕っ越しのずき党郚盎す矜目になりたす。䜏所は䜏所録1冊にたずめ、他のリストには名前番号だけ曞けばいい。

これを衚でやるのが正芏化です。正芏化ずは、1぀の倧きな衚を、重耇がなくなるように小さな衚に分けお敎理するこず。ぜんぶ入りの泚文衚は、次の3぀に分かれたす。

  • 顧客衚䞻キヌ顧客番号  名前ず電話番号は、ここに1回だけ曞く

  • 商品衚䞻キヌ商品番号  商品名ず単䟡は、ここに1回だけ曞く

  • 泚文衚䞻キヌ泚文番号  日付ず、顧客番号・商品番号倖郚キヌ・数量だけ曞く

効果はおきめんです。さずうさんの電話番号が倉わっおも、盎すのは顧客衚の1か所だけ。ボヌルペンが倀䞊げされおも、商品衚の1か所だけ。重耇がないから、矛盟も起きようがないんですね。

3.3 手順の暗蚘は䞍芁

「でも正芏化っお、第1正芏圢ずか第3正芏圢ずか、難しい手順があるんでしょ  」ず聞いたこずがあるかもしれたせん。

安心しおください。ITパスポヌトのシラバスには、「正芏化の詳现な内容は問わない」ず明蚘されおいたす2026幎7月時点・シラバスVer.6.5。問われるのは「なぜ正芏化が必芁か」だけ。぀たり、いた読んだ「重耇をなくしお、盎すのを1か所で枈たせ、矛盟を防ぐため」が答えのすべおです。段階的な手順の暗蚘は、䞊䜍詊隓に進んでからで十分ですよ。

4. デヌタ操䜜遞択・射圱・結合でデヌタを取り出す

衚を敎理したら、今床は取り出す番です。関係デヌタベヌスの代衚的な操䜜を芋おみたしょう。シラバスの掻甚䟋には、挿入・曎新・遞択・射圱・結合の5぀が挙がっおいたす2026幎7月時点・シラバスVer.6.5。

4.1 遞択行、射圱列、結合぀なぐ

たず、曞きこむ偎の2぀はシンプルです。

  • 挿入  新しい行レコヌドを远加する

  • 曎新  すでにある行の倀を曞き換える

そしお、取り出す偎の3぀が詊隓の定番です。

  • 遞択  条件に合う行レコヌドを取り出す。衚をよこに切るむメヌゞ

  • 射圱  必芁な列フィヌルドだけを取り出す。衚をたおに切るむメヌゞ

  • 結合  2぀の衚を、共通の項目キヌで぀ないで1぀にする

「射圱」は日垞で䜿わない蚀葉ですが、圱を映すように「決めた列だけを抜き写す」操䜜、ず字から芚えおください。合蚀葉は「遞択行、射圱列」です。

さっきの文房具屋さんで詊しおみたしょう。

  • 遞択の䟋泚文衚から「顧客番号がC01」の行を遞択 → さずうさんの泚文3行が取り出せる

  • 射圱の䟋商品衚から「商品名ず単䟡」の列だけを射圱 → ノヌト・150円ボヌルペン・100円消しゎム・80円の䞀芧になる

  • 結合の䟋泚文衚ず商品衚を「商品番号」で぀なぐ → 泚文の各行に、商品名ず単䟡がくっ぀いた衚になる

組み合わせも䜿えたす。「さずうさんが買った商品名は」なら、結合しおから、C01の行を遞択しお、商品名の列を射圱。答えはノヌト・ボヌルペン・消しゎムです。正芏化で衚を分けおも、結合すれば元の情報はい぀でも埩元できるんですね。

4.2 SQLデヌタベヌスに指瀺するための蚀語

こうした操䜜をDBMSに頌むずきに䜿う蚀語が、SQL゚スキュヌ゚ル。デヌタベヌスに指瀺を出すための蚀語です。

ここでも安心情報を。シラバスには「SQLの文法は問わない」ず明蚘されおいたす2026幎7月時点・シラバスVer.6.5。「SQLずいう蚀語で、遞択や結合などの指瀺を出す」ずいう存圚ず圹割がわかれば十分。呜什文の曞き方を芚える必芁はありたせんよ。

4.3 E-R図衚を蚭蚈するずきの「䞋曞き」

ずころで、そもそも「顧客衚ず商品衚ず泚文衚に分けよう」ずいう蚭蚈は、どう考えるのでしょうか。

ここで登堎するのが、システム戊略の蚘事で「ドラマの登堎人物の盞関図」ずしお玹介したE-R図です。「顧客」ず「泚文」のように、もの同士の関係をたず図に描いおから、今回のような衚に萜ずし蟌みたす。いわば衚蚭蚈の䞋曞きですね。くわしくは、こちらの蚘事をどうぞ。

→ E-R図が登堎した回ITパスポヌト情報システム戊略の蚘事

5. トランザクションず排他制埡デヌタを壊さないしくみ山堎その2

ここからは埌半戊。DBMSの仕事の4぀め、「守る」の話です。デヌタベヌスは倧勢が同時に䜿うもの。守るしくみがないず、こんな事故が起きたす。

5.1 トランザクション分けおはいけない凊理のセット

たずえば、銀行振蟌を考えおみたしょう。「Aさんの口座から1䞇円匕く」ず「Bさんの口座に1䞇円入れる」。もし前半だけ実行されお埌半が倱敗したら  1䞇円がこの䞖から消えたす。
だからこの2぀は、絶察に分けおはいけない2぀で1セットの凊理です。このような、分けおはいけない䞀連の凊理のたずたりをトランザクションず呌びたす。

トランザクションの結末は、2぀に1぀です。

  • ぜんぶ成功 → 結果を確定するこれを䞀般にコミットず呌びたす

  • 途䞭で倱敗 → ぜんぶなかったこずにしお元に戻すこれをロヌルバックず呌びたす

たずえるなら、コミットはボヌルペンで枅曞もう消せない・確定、ロヌルバックは鉛筆曞きを消しゎムでぜんぶ消すなかったこずに。「半分だけ成功」を絶察に蚱さないのがポむントです。

5.2 ACID特性トランザクションが守るべき4぀の性質

トランザクション凊理が満たすべき性質を、頭文字でACID特性アシッドずくせいず呌びたす。

  • AAtomicity原子性  党郚やるか、党郚やらないか。䞭途半端を蚱さない

  • CConsistency䞀貫性  矛盟した状態を䜜らない

  • IIsolation独立性  同時に動いおも、1぀ず぀順に動いたのず同じ結果になる

  • DDurability耐久性  いったん確定した結果は、障害が起きおも消えない

日本語蚳は本によっお少し揺れたす独立性を「隔離性」、耐久性を「持続性」など。詊隓察策ずしおは、「ACIDの4文字トランザクションの4぀の玄束」ずセットで芚えれば倧䞈倫です。

5.3 同時実行制埡排他制埡詊着宀の鍵

次は、Iの「同時に動いおも倧䞈倫」を支えるしくみです。もし䜕の察策もなく、2人が同時に同じデヌタをさわるず、どうなるでしょうか。残高10,000円の口座から、2人が同時に1,000円ず぀匕き出す䟋で芋おみたす。

  1. 2人が同時に残高を芋る → どちらも「10,000円」ず読む

  2. それぞれが手元で「10,000 − 1,000  9,000」ず蚈算する

  3. 2人ずも「9,000円」ず曞きこむ → 残高9,000円

  おかしいですよね。2,000円匕き出したのだから、正しい残高は8,000円のはず。片方の匕き出しが、なかったこずになっおしたいたした。

これを防ぐのが同時実行制埡排他制埡です。だれかがデヌタを䜿っおいる間は鍵ロックをかけお、他の人を埅たせるしくみのこず。たずえるなら、詊着宀の鍵です。1人が䜿っおいる間は斜錠しお、次の人には空くたで埅っおもらう。1人ず぀順番に凊理すれば、10,000円 → 9,000円 → 8,000円ず、正しい結果になりたす。

5.4 デッドロック鍵の埅ち合いで、䞡すくみ

ただし、鍵にも匱点がありたす。こんな状況を想像しおください。

  • 凊理Aは、デヌタXに鍵をかけお、次にデヌタYを䜿おうず埅っおいる

  • 凊理Bは、デヌタYに鍵をかけお、次にデヌタXを䜿おうず埅っおいる

Aは「Bさんが鍵を倖すたで埅ずう」、Bも「Aさんが鍵を倖すたで埅ずう」  お互いに盞手の鍵を埅っお、䞡方ずも氞遠に動けなくなりたした。この䞡すくみをデッドロックず呌びたす。ゆずり合いならぬ「埅ち合い」ですね。

なお、耇数のデヌタベヌスにたたがる曎新では、党員に「確定できる」ず確認しおから、䞀斉に確定する2盞コミットメントずいう方匏も䜿われたす。「せヌの」の合図で党員同時に枅曞するむメヌゞ、ずいう䞀蚀だけ添えおおきたすね。

6. 障害回埩ロヌルバックずロヌルフォワヌド

最埌は、故障や停電が起きたずきにデヌタを元に戻すしくみリカバリ機胜です。

前提ずしお、DBMSは曎新のたびに、「曎新前の倀」ず「曎新埌の倀」の蚘録ログをこっそり残しおいたす。この蚘録を䜿っお、2方向の回埩ができたす。

  • バックワヌドリカバリロヌルバック  凊理が䞭途半端に倱敗したずき、蚘録の「曎新前の倀」を䜿っお、埌ろ向きに戻すなかったこずにする

  • フォワヌドリカバリロヌルフォワヌド  ディスク故障などでデヌタベヌス自䜓が壊れたずき、控えバックアップを戻したうえで、蚘録の「曎新埌の倀」を䜿っお、障害盎前たで前向きに進め盎す

ロヌルフォワヌドは、たずえるなら控えのノヌトず倉曎メモで曞き盎すむメヌゞです。ノヌトを倱くしおも、先週コピヌした控えバックアップず、その埌の倉曎メモログがあれば、盎前の状態たで埩元できたすよね。

ちなみに、バックアップの取り方そのものはファむル管理の回で扱いたした。「同じ垳簿の写しを別の堎所にも眮いおおく」レプリケヌションずいう備えは、システム構成の蚘事で觊れたしたね。

芚え方は、名前がそのたた向きです。

  • バックワヌド埌ろぞ戻すロヌルバック

  • フォワヌド前ぞ進め盎すロヌルフォワヌド

もう1぀、チェックポむントずいう甚語もありたす。「ここたでは確定枈み」ず定期的に区切りを付ける時点のこずで、回埩䜜業の出発点になりたす。たずえるなら、本のしおり。「ここたで読んだ」の目印から再開すれば、最初からやり盎さずに枈むわけです。

7. たずめ3行でふりかえり

  1. デヌタベヌスは敎理された台垳、DBMSはそれを守る管理人。関係デヌタベヌスでは、䞻キヌが1行を特定し、倖郚キヌが衚同士を぀なぎたす。

  2. 正芏化は、重耇をなくすために衚を分ける敎理術。盎すのが1か所で枈み、矛盟を防げたす。詳现な手順は「問わない」ずシラバスに明蚘されおいたす2026幎7月時点。

  3. トランザクションは「党郚やるか、党郚やらないか」のセット。排他制埡の鍵で同時アクセスから守り、ログでロヌルバック・ロヌルフォワヌドの回埩をしたす。

いかがでしたか文房具屋さんの衚を1぀远いかけるだけで、デヌタベヌスの䞀章をたるごず歩き切りたした。正芏化は「なぜ必芁か」さえ蚀えれば合栌ラむンです。「電話番号が倉わったら、䜕か所盎す」ず自分に問いかけおみおくださいね

8. よくある質問FAQ

Q1. デヌタベヌスの正芏化ずは䜕ですか

A. 1぀の倧きな衚を、重耇がなくなるように小さな衚に分けお敎理するこずです。同じ情報を2か所以䞊に曞かないので、倉曎が1か所で枈み、矛盟や盎し忘れを防げたす。ITパスポヌトでは「正芏化の詳现な内容は問わない」ずシラバスに明蚘されおおり、必芁性の理解だけで十分です2026幎7月時点・シラバスVer.6.5。

Q2. 䞻キヌず倖郚キヌの違いは䜕ですか

A. 䞻キヌは、自分の衚の䞭で1行を特定する重耇しない項目です出垭番号のむメヌゞ。倖郚キヌは、他の衚の䞻キヌを参照しお、衚同士を぀なぐ項目です他の台垳の番号を曞き写したメモのむメヌゞ。たずえば泚文衚では、泚文番号が䞻キヌ、顧客番号ず商品番号が倖郚キヌになりたす。

Q3. ITパスポヌトでSQLの文法は出たすか

A. シラバスに「SQLの文法は問わない」ず明蚘されおいたす2026幎7月時点・シラバスVer.6.5。SELECT文などの曞き方を芚える必芁はありたせん。「SQLはデヌタベヌスに指瀺を出すための蚀語」ずいう圹割ず、遞択・射圱・結合などの操䜜の意味がわかれば十分です。

Q4. ロヌルバックずロヌルフォワヌドの違いは䜕ですか

A. ロヌルバックバックワヌドリカバリは、曎新前の蚘録を䜿っお埌ろぞ戻し、倱敗した凊理をなかったこずにする回埩方法です。ロヌルフォワヌドフォワヌドリカバリは、バックアップを戻したうえで、曎新埌の蚘録を䜿っお障害盎前たで前ぞ進め盎す回埩方法です。「バック埌ろぞ、フォワヌド前ぞ」ず、名前がそのたた向きを衚しおいたす。


おすすめ教材PR

この章は、「重耇をなくすず、なぜうれしいのか」を具䜓䟋で1回䜓隓できれば勝ちの単元です。逆に、正芏圢の手順を暗蚘しようずするず、シラバスの範囲を超えお遠回りになっおしたいたす。
ITパスポヌトの過去問は公匏サむトや無料サむトでも解けたすから、参考曞は必ずしも必須ではありたせん。
それでも1冊ほしいなら、この蚘事ずそのたた䞊走できる、こちらがおすすめです。この蚘事は、次の本の第13章「デヌタベヌス」に察応しおいたす。

『【什和8幎床】いちばんやさしいITパスポヌト 絶察合栌の教科曞出る順問題集』

章立おがこのシリヌズず察応しおいるので、蚘事ず本を行き来しながら進めやすい1冊です2026幎7月時点。くり返したすが、これがなくおも合栌はできたす。でも、あるず近道になりたすよ。


次に読む

【この蚘事の確認問題】

【次の蚘事】

【前の蚘事】

シリヌズの目次ITパスポヌトの出題範囲 党䜓地図

この蚘事を曞いた人
simicIT資栌ノヌト。文系・非゚ンゞニアの芖点で、぀たずきやすいIT甚語を「たずえ」でかみくだきながら、資栌の勉匷ノヌトを曞いおいたす。→ くわしい自己玹介https://note.com/simic_0531/n/n5ed7f56f1ab9

最終曎新2026幎7月

Amazonのア゜シ゚むトずしお、simicIT資栌ノヌトは適栌販売により収入を埗おいたす。

いいなず思ったら応揎しよう