IoT+WEBのためのホームサーバ計画の実装編19。DBで何管理するのだ?
DBは最低限って方針
実は、、DBはあんまり好きじゃないのです。
なんか、キッチリ決めて設計してこれ以上でも以下でもないみたいな感じになるじゃないですか。
まぁ、もともとあんまり好きじゃないからあんまりやらない。
やらないからスキルが上がらないってのもあるあるですけどねー。
で、結局、何を管理するかって言うと、
●user
●HomeServer
のIDを管理する程度のものです。
ユーザ管理
ユーザ管理はとりあえず、こんなんで。
CREATE TABLE IF NOT EXISTS [T_user] (
[id] INTEGER PRIMARY KEY AUTOINCREMENT,
[username] VARCHAR(256) NOT NULL UNIQUE,
[passmd5] VARCHAR(40) NOT NULL,
[regist] INTEGER NOT NULL DEFAULT 0,
[registdate] INTEGER NOT NULL,
[lastdate] INTEGER NOT NULL,
[note] VARCHAR(256),
[etc] TEXT
);
ユーザ名と、、パスワードのMD5と、登録済フラグと、登録日時と、最終アクセス日時と、noteとその他。
noteとその他は、ユーザ登録の時にちょっと使ったりしました。
★登録されるタイミング➡ユーザがユーザ登録したとき。
ここだけは、PHPかな。
HomeServer管理
HomeServer管理はとりあえずこんなんで。
CREATE TABLE [T_home] (
[id] INTEGER PRIMARY KEY AUTOINCREMENT,
[homeserverid] VARCHAR(256) NOT NULL UNIQUE,
[homeserverpin] VARCHAR(256) NOT NULL UNIQUE,
[homeserverfull] VARCHAR(256) NOT NULL,
[homeservermemo] VARCHAR(256) NOT NULL, /* 表示用 */
[enabled] INTEGER NOT NULL DEFAULT 1,
[regist] INTEGER NOT NULL DEFAULT 0,
[registdate] INTEGER NOT NULL,
[lastdate] INTEGER NOT NULL,
[note] VARCHAR(256),
[j] TEXT,
[etc] TEXT
);
idとパスとフルネームと表示用メモと、有効化フラグと、登録済フラグと、登録日時と最終アクセス日時と備考とクライアント情報JSONとその他。
★登録されるタイミング➡HomeServerが起動したとき。その後、定期、不定期に更新。
※クライアントが増えた時とかね。
WebSocket管理
そう、WebSocketのサーバ側としては、userとHomeServerへのサーバ側からの通信は、WebSocketを使うわけなので、そのIDを管理します。
CREATE TABLE [T_client] (
[id] INTEGER PRIMARY KEY AUTOINCREMENT,
[type] INTEGER NOT NULL DEFAULT 0, /* 0:user 1:HomeServer */
[key] VARCHAR(256) NOT NULL UNIQUE, /* T_user.username | T_home.homeserverid */
[wsc_n] INTEGER NOT NULL DEFAULT 0, /* */
[gip] VARCHAR(32), /* Global IP */
[lip] VARCHAR(32), /* Local IP for HomeServer */
[regist] INTEGER NOT NULL DEFAULT 0,
[registdate] INTEGER NOT NULL,
[lastdate] INTEGER NOT NULL,
[note] VARCHAR(256),
[etc] TEXT
);
user/homeServer種別、名前、WebSocketクライアントID、GrobalIP、LocalIP、登録有効化フラグ、登録日、更新日、NOTE、備考、、って感じです。
★登録されるタイミング➡WebSocketへのアクセスが発生したとき。
ユーザのHomeServer連携管理
CREATE TABLE [T_reluser] (
[id] INTEGER PRIMARY KEY AUTOINCREMENT,
[username] VARCHAR(256) NOT NULL,
[homeserverid] VARCHAR(256) NOT NULL,
[regist] INTEGER NOT NULL DEFAULT 0,
[registdate] INTEGER NOT NULL,
[lastdate] INTEGER NOT NULL,
[note] VARCHAR(256),
[etc] TEXT
);
id、ユーザID、HomeServerID、有効化フラグ、登録日、更新日、note、備考、、って感じです。
★登録されるタイミング➡ユ-ザ登録時。ユーザがIDを入力したときや、HomeServerと同じLan内からアクセスして自動登録したとき。
DBものは、自動で登録するようなSQLなりなんなりを書いておくとよいです。
どうせ、あれこれ、項目を増やしたり減らしたりとかあると思うし、動作させてから気づくこともあると思うので、登録するようなものを最初に作っとくと良いですね。
まぁ例によって、
退屈なことはPythonにでもやらせましょう。