SQLite | ゼロからはじめるSQL、30日で習得するSQLite:基礎理解 - Day3 テーブル作成

SQLite
スポンサーリンク

Day3 前半

「テーブルを作る」とは何をしているのかをちゃんと理解する

Day1・Day2で、データベースのイメージと SQLite の動かし方はつかめてきました。
Day3 ではいよいよ、SQL の中でも超頻出の文である CREATE TABLE を使って、「自分でテーブルを設計して作る」段階に入ります。

ここを「なんとなくコピペ」で済ませるか、「意味を理解して書ける」ようになるかで、その後の伸びが大きく変わります。
前半では、CREATE TABLE の基本構造と、データ型 INTEGER / TEXT の本質を、初心者向けにかみ砕いて説明します。


CREATE TABLE の役割

「どんな形の箱を作るか」を宣言する文

CREATE TABLE は、一言でいうと 「この名前のテーブルを、こういう列構成で作ってください」 とデータベースに伝える命令です。
テーブルは「データを入れる箱」ですが、CREATE TABLE はその箱の「設計図」を書いているイメージです。

たとえば、会員情報を入れる users テーブルを作りたいとします。
そのとき、頭の中では次のようなことを決めています。

このテーブルには、会員番号、名前、年齢、メールアドレスを入れたい。
会員番号と年齢は数字、名前とメールアドレスは文字列として扱いたい。

この「列の名前」と「その列に入るデータの種類」を、SQL で宣言するのが CREATE TABLE です。


CREATE TABLE の基本構造

まずは「形」を覚える

SQLite でテーブルを作るときの基本形は、次のようになります。

CREATE TABLE テーブル名 (
  列名1 データ型,
  列名2 データ型,
  ...
);
SQL

テーブル名のあとに丸かっこを書き、その中に「列名 データ型」をカンマ区切りで並べていきます。
この「列名 データ型」の組み合わせが、テーブルの“骨格”になります。


例題:users テーブルを作る

Day1 で見た表を、今度は自分の手で定義する

Day1 で扱った users テーブルを、CREATE TABLE で定義してみましょう。

CREATE TABLE users (
  id    INTEGER,
  name  TEXT,
  age   INTEGER,
  email TEXT
);
SQL

この1文で、次のことを SQLite に伝えています。

users という名前のテーブルを作る。
id という列には整数(INTEGER)を入れる。
name という列には文字列(TEXT)を入れる。
age という列には整数(INTEGER)を入れる。
email という列には文字列(TEXT)を入れる。

ここで重要なのは、「列ごとに、どんな種類のデータを入れるかを決めている」 という点です。
この「種類」が、データ型(型)です。


データ型とは何か

「この列には、こういう性質のデータだけを入れます」という約束

データ型は、列に入る値の「性質」を表します。
たとえば、年齢の列に「二十歳です」といった文字列が入ってしまうと、平均年齢を計算するときに困ります。
逆に、名前の列に数字だけを入れる、というのも不自然です。

そこで、列ごとに「ここは整数だけ」「ここは文字列だけ」といったルールを決めておきます。
このルールがデータ型です。

SQLite にはいくつかの型がありますが、Day3 前半では INTEGERTEXT に絞って理解を固めます。
この2つだけでも、かなり多くのテーブルが作れます。


INTEGER 型

整数を扱うための型(年齢・個数・IDなど)

INTEGER は「整数」を表す型です。
年齢、個数、連番の ID など、「小数点を使わない数字」は基本的に INTEGER で表現します。

たとえば、次のような列は INTEGER が自然です。

年齢(age)
在庫数(stock)
会員番号(id)

SQLite の INTEGER は、かなり大きな範囲の整数を扱えます。
学習段階では「整数ならとりあえず INTEGER」と覚えておいて問題ありません。


TEXT 型

文字列を扱うための型(名前・メール・住所など)

TEXT は「文字列」を表す型です。
人の名前、メールアドレス、住所、メモなど、「文字として扱いたいもの」は基本的に TEXT です。

たとえば、次のような列は TEXT が自然です。

名前(name)
メールアドレス(email)
住所(address)
備考(note)

SQLite では、文字数の上限を TEXT(50) のように書いて制限する必要はありません(そういう書き方もできますが、実際には TEXT と同じ扱いになります)。
まずは「文字なら TEXT」とシンプルに覚えておいて大丈夫です。


例題:商品テーブルを設計してみる

自分で「列名」と「型」を考える練習

今度は、商品情報を管理する products テーブルを考えてみましょう。
次のような情報を入れたいとします。

商品ID
商品名
価格

このとき、どの列を INTEGER にして、どの列を TEXT にするかを考えます。

商品ID は番号なので INTEGER
商品名は文字列なので TEXT
価格は整数(小数なし)で扱うことにして INTEGER

これを CREATE TABLE にすると、次のようになります。

CREATE TABLE products (
  id    INTEGER,
  name  TEXT,
  price INTEGER
);
SQL

この時点で、あなたはすでに「テーブル設計の入り口」に立っています。
つまり、「どんな情報を、どんな型で持つか」を自分で決められている、ということです。


型を決めることのセキュリティ的な意味

「変なデータが紛れ込む余地を減らす」という防御になる

情報セキュリティの視点から見ると、「型をきちんと決める」というのは、単なるお作法ではなく 防御の一部 です。

たとえば、年齢の列が TEXT になっていて、そこに「二十歳」「二十歳以上」など自由な文字列が入ってしまうと、
後から集計するときに正しく処理できませんし、「想定外のデータ」が紛れ込む余地が大きくなります。

一方で、年齢を INTEGER にしておけば、「数字以外は基本的におかしい」ということがすぐに分かります。
型をきちんと決めることは、「データの品質を守る」「おかしな値を早めに検知する」という意味で、セキュリティにも直結します。


Day3 前半のまとめ

CREATE TABLE は「テーブルの設計図」をデータベースに伝える命令。
列ごとに「名前」と「データ型(性質)」を宣言する。
INTEGER は整数用の型で、年齢・個数・ID などに使う。
TEXT は文字列用の型で、名前・メール・住所などに使う。
型をきちんと決めることは、データの品質とセキュリティを守ることにもつながる。


後半では、
CREATE TABLE のもう少し実践的な書き方(制約の軽い導入)、
INTEGER / TEXT を使った具体的なテーブル設計のバリエーション、
実際にテーブルを作ってデータを入れてみる一連の流れ
を、例題つきでじっくり解説します。

タイトルとURLをコピーしました