なんのために共有するか?
sqlite3でテーブルを作成するときのポイントをまとめました。
(知っておくと他のSQLでも応用できるはず。)
flaskのチュートリアルとして作成する
flaskrのデータベースとそのテーブル構成は下記のようになっている。
その中から学習しよう。
下記に制約の解説があるので、
まずはこんな感じになっているとさーっと読み飛ばせばOK。
CREATE TABLE テーブル名
でテーブルを作成。
flaskではuserテーブルとpostテーブルを取り扱う。
-- Initialize the database.
-- Drop any existing data and create empty tables.
DROP TABLE IF EXISTS user;
DROP TABLE IF EXISTS post;
CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
);
CREATE TABLE post (
id INTEGER PRIMARY KEY AUTOINCREMENT,
author_id INTEGER NOT NULL,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
title TEXT NOT NULL,
body TEXT NOT NULL,
FOREIGN KEY (author_id) REFERENCES user (id)
);
PRIMARY KEY制約
カラムにPRIMARY KEY制約を設定した場合、
そのカラムは主キーになる。
だいたいテーブル内のidはPRIMARY KEY制約を持ってる。
flaskチュートリアルでも重要なところだけpick upするとこんな感じ。
CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
(省略)
);
CREATE TABLE post (
id INTEGER PRIMARY KEY AUTOINCREMENT,
(省略)
);
UNIQUE制約
カラムに格納する値として
既に格納されているデータの値とかぶった値では登録できないようにする場合、
カラムにUNIQUE制約を設定する。
例えばusernameがかぶるのはダメよと。
username TEXT UNIQUE NOT NULL,
NOT NULL制約
NOT NULL制約を設定すると、
NULLを格納することができなくなる。
逆にいうと、なんかしらの値があれば格納することができるってこと。
例えば、パスワードはなしはさすがにまずいよねって意味ならこう。
(省略)
password TEXT NOT NULL
(省略)
DEFAULT制約
値をテーブルに追加するときに、
timestampはDEFAULTで記述すると便利。
(省略)
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
(省略)
外部キー(FOREIGN KEY)
他の行と比べると、ちょっと癖のある書き方。
だけどすぐ理解できるから安心を。
idはuserテーブルのPRIMARY KEYになっている。
でそれをpostテーブルの中ではauthor_idという名前で使いたい
ということだ。
こうすると、
そもそもuserテーブルに存在しないidをもつデータは、
postテーブルには格納できねーよ?
って仕組み。
FOREIGN KEY (author_id) REFERENCES user (id)
応用編
CHECK制約
CHECK制約を設定すると、
任意の条件式を指定できます。
例えば0以上の値を設定してほしいときはこう。
(省略)
test_result integer check(test_result >= 0 and test_result <= 100));
(省略)
最後に
「知りたかったことが知れた!」とか「新しいことが知れた!」
と思ったら左のいいねボタンをポチッとお願いします!