【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 KEYPRIMARY 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(主キー)。
美しいシステムは、美しいテーブル設計から生まれます。ぜひ、ご自身でデータベースを構築する際は「制約」を意識してみてくださいね!
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!