見出し画像

【SQL・DB特別編2】ゼロから自分の箱を作る!「CREATE TABLE」とデータのルール(制約)

「データベース・SQL」シリーズの特別編、第2弾をお届けします!

これまでの入門編や基礎編では、データの検索(SELECT)や、追加・更新(INSERT / UPDATE)など、「すでに存在しているテーブル」に対して操作を行う方法を学んできました。

しかし、もしあなたが新しく自分自身のWebサービスやアプリを作ろうと思ったとき、そもそもデータを保存するための「テーブル」そのものをゼロから作り出さなければなりません。

今回は、データベース内に新しい箱を作る「CREATE TABLE」コマンドと、システムをバグから守るための強力な防壁「制約(ルール)」について解説します。

いよいよ、あなた自身がデータベースの創造主になる時が来ました!


1. 新しいテーブルを作る「CREATE TABLE」

データベースの中に新しい表(テーブル)を作るコマンドは、非常に直感的です。

「どんな名前のテーブルか」「どんな列があるか」「それぞれの列にはどんな種類のデータが入るか」を指定します。

例えば、新しいサービスで「ユーザー情報(USERS)」を管理するテーブルを作ってみましょう。

CREATE TABLE USERS (
    ID INTEGER,
    NAME VARCHAR(50),
    AGE INTEGER
);
  • CREATE TABLE テーブル名:テーブルの名前を決めます。

  • カッコ ( ) の中身:列の名前と、その列に入る「データ型(種類)」をペアにしてカンマで区切ります。

    • INTEGER:整数の数字が入る列

    • VARCHAR(50):最大50文字までの文字列が入る列

たったこれだけで、まっさらな新しいテーブルがデータベース上に誕生します!


2. ゴミデータの混入を防ぐ「制約(ルール)」

さて、先ほどのコードでテーブルは作れましたが、実は実務のシステム開発において、あの書き方は絶対にNGとされています。

なぜなら、あのままだと「IDが空っぽのユーザー」や、「IDが全く同じユーザーが2人いる」といった、システムを崩壊させる異常なデータ(ゴミデータ)が簡単に登録できてしまうからです。

それを防ぐために、列に対して「このルールを守らないデータは絶対に入れない!」という「制約(Constraint)」を設定します。

① 絶対に空欄を許さない「NOT NULL制約」

「名前(NAME)」のように、絶対に登録してもらわないと困る列には NOT NULL を付けます。

NAME VARCHAR(50) NOT NULL

これを設定すると、名前を空欄のままデータを追加(INSERT)しようとした瞬間、データベースが「ルール違反です!」とエラーを弾き返してくれます。

② テーブルの絶対的リーダー「主キー(PRIMARY KEY)制約」

データベースにおいて最も重要な制約が「主キー」です。

これは、「この列のデータを見れば、必ず1行だけを特定できる(重複がない)」ということを保証するものです。出席番号やマイナンバーのようなものですね。

ID INTEGER PRIMARY KEY

PRIMARY KEY に設定された列は、自動的に「空欄禁止(NOT NULL)」かつ「重複禁止」という最強のルールが適用されます。


3. 実務レベルの美しい CREATE TABLE

それでは、これまでの「制約」の知識を組み合わせて、実務でそのまま通用する美しくて堅牢な「USERS」テーブルを作ってみましょう。

CREATE TABLE USERS (
    ID INTEGER PRIMARY KEY,
    NAME VARCHAR(50) NOT NULL,
    AGE INTEGER,
    MAIL VARCHAR(100) UNIQUE NOT NULL
);
  • ID:主キー(PRIMARY KEY)。空欄不可で、絶対に他の人と被らない。

  • NAME:名前。空欄不可(NOT NULL)。

  • AGE:年齢。未成年の場合は登録しないこともあるので、空欄(NULL)を許容。

  • MAIL:メールアドレス。空欄不可で、かつ UNIQUE(他の人とメアドが被ってはいけない)という制約を追加。

いかがでしょうか?

この堅牢な箱(テーブル)を最初に設計しておくことで、後からどんなプログラムがデータを書き込もうとしても、ルール違反のデータはデータベースの入り口で全てシャットアウトされます。


まとめ

  • テーブルをゼロから作るには CREATE TABLE を使う。

  • 異常なデータが入るのを防ぐために、列に対して 「制約」 を設ける。

  • 実務で必須の制約は、空欄を防ぐ NOT NULL と、データを一意に特定する PRIMARY KEY(主キー)

美しいシステムは、美しいテーブル設計から生まれます。ぜひ、ご自身でデータベースを構築する際は「制約」を意識してみてくださいね!

いいなと思ったら応援しよう!

人生ライブラリ よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!