Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。11:00DBSQL技術記事ポスト前回は、データベースやSQLの歴史的な背景の話から始めて、SQLの基本のデータ単位であるテーブルを理解することを目標にさまざまな概念を見てきました。本記事ではいよいよ、RDBMSのクエリ言語であるSQLの文法に触れていきます。SQL習得に必要な基本のキを学ぶサブ言語DDLとDMLSQLにはサブ言語がいくつか定義されており、この連載では、DDLとDMLを扱います。データ定義言語(DDL)は、データベースのデータ構造を定義する言語です。Languageの略です。DDLは、表の作成(CREATE)、列の更新(ALTER)などの命令を行います。Languageのことで、データの検索(SELECT)、挿入(INSERT)などの命令が含まれます。CREATECREATE文は、テーブルの構造(スキーマ)を定義する時に利用します。これからステップバイステップで、学生クラブのデータベースを作成していきます。このデータベースには、学生、クラブ、クラブメンバーという3つのテーブルが含まれています。学生データベースに含まれる3つのテーブルCREATEの構文はシンプルで、基本的にはテーブル名と、属性名と属性のデータ型のペアのリストを書くだけになります。Key)を設定します。主キーとは、テーブル内の1行を一意に識別するための検索キーです。このキーをある属性に対して設定すると、その列(主キー列)では、値の重複が禁止されます。この制約を、主キー制約と呼びます。KEY(対象の属性名)をリストに加えるだけです。(sid));この例だと、主キー制約によって、同じ学生番号(sid)を持つ学生を登録することができなくなります。主キーは、複数の列から作ることもできます(複合主キー)。age)とすると、氏名と年齢が同じ学生を重複して登録することができなくなります。他の2つのテーブルも主キー付きで作成してみます。cid));club_memberの主キーを複合主キーにした理由は、1人の学生があるクラブに複数登録されないようにするためです。FKもう1つ、加えたい制約があります。外部キーによる制約です。特定のテーブルの列を参照するためのキー(ポインター)です。このポインターを利用すると、2つのテーブルの間に関連(親子関連)をもたらすことができます。それでは、club_memberとstudentテーブルの間に親子関連を持たせてみます。参照先のテーブル名(参照先PK)が追加されたのがわかると思います。これで、参照元(club_member)が子テーブル、参照先(student)が親テーブルとなります。外部キーは、主キーと違い1つのテーブルに対して複数設定できます。club_memberとclubの間にも親子関連を持たせます。club(cid));さて、外部キーを設定すると、具体的に何が嬉しいのでしょうか。主キー同様、外部キーによって課される制約を外部キー制約(または、参照整合性制約)と呼びます。この制約によって以下2つのことが禁止されます。子テーブルの外部キーの値は親テーブルの主キーに存在する値でないといけない親テーブルが持つ参照されているキーに対してのUPDATE/DELETEを禁止もう少し説明すると、1に関しては、例えば、学生番号が4の学生をclub_memberテーブルに追加することができなくなります。studentテーブルにsidが4の学生が存在しないからです。2に関しては、例えば学生番号1の学生を削除することができなくなります。理由は、club_memberにsidが1のレコードが存在するからです。何となく外部キー制約のイメージが掴めたでしょうか。MySQLの参照アクション禁止事項の2つ目は、MySQLでは参照アクションと呼ばれています。参照アクションは、親テーブルが持つ参照されているキーに対してUPDATEやDELETEをした場合の子テーブルの外部キーに与える影響を指します。UPDATEとDELETEそれぞれに対して、4つのアクションから1つ選ぶことができます。先ほど説明した制約は、MySQLではデフォルトの挙動になっています。シンタックスは以下のような形になります。アクション名PKとFKを設定しよう基本的に主キーと外部キーは設定しておきましょう。主キーは、行の重複を防いだり、クエリで個別の行を参照可能にしたり、外部キー参照をサポートしたりなどのメリットがあります。外部キーを用いると、参照整合性が保たれ、CASCADEアクションを実現できます。このような手間なことはアプリ側でやらずにデータベースに任せましょう。ここまでの要点RDBMSはリレーショナルモデルがベースでした。3つの観点に着目すると以下のようにまとめることができます。構造:テーブル操作:SQL整合性:主キー制約、外部キー制約データベースを比較する際は、この3つの軸を用いると比較が容易になると思います。TABLE文の基礎を学びました。次はデータ操作言語のSELECTをみていきます。ユウタ)海外の大学でコンピュータサイエンスの学士を取得後、株式会社サイバーエージェントに入社。チャットボットプラットフォームのバックエンド開発などを経て、現在は、株式会社メルコインで、暗号資産やブロックチェーンに関するサービス開発に従事。その他、TechTrainのメンタリングも務める。プラットフォームチームの意義と実践のポイント1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。プラットフォームチームの意義と実践のポイント1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。プラットフォームチームの意義と実践のポイント1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。