> テーブル設計含めより適した方法を引き続き検討していきたいと思いますので、
> 機会がありましたらぜひよろしくお願い致します。
テーブルの構造を変更する場合のサンプルを以下に載せておきます。
まず、リマインダーは
・ 日 単位で発生するもの
・ それ以外のもの( 週・曜日 )
の2種に大別できるでしょう。
( 両立しない条件のため )
よって、リマインダの定義テーブルに
種別を管理するフィールドが必要になります。( ※1 )
次に、リマインダーの発生周期は
月、週、曜日、日の組み合わせによることから
条件テーブルに、これらの値を格納するフィールドが必要 ( ※2 )
条件テーブルへデータを登録するにあたり、
行数が増えることに漠然とした不安を感じておられるようなので
行数を抑制できるフィールド構成にします ( ※3 )
特定の日に1度きりで実施されるリマインダと
特定の周期で何度も実施されるリマインダは
入力項目を共通化して統一し、Nullや意味不明の値は許可しない ( ※4 )
※1 ~ ※4 を網羅したテーブル定義
CREATE TABLE T_リマインダー
(
リマインダーID INT NOT NULL
, リマインダー内容 VARCHAR( 100 ) NOT NULL
, リマインダー種別 SMALLINT NOT NULL
, 開始年 SMALLINT NOT NULL
, 終了年 SMALLINT NOT NULL
, CONSTRAINT pk_reminder PRIMARY KEY ( リマインダーID )
);
CREATE TABLE T_条件
(
条件ID AUTOINCREMENT PRIMARY KEY
, リマインダーID INT NOT NULL
, 対象月_from SMALLINT NOT NULL
, 対象月_to SMALLINT NOT NULL
, 週番号_from SMALLINT NOT NULL
, 週番号_to SMALLINT NOT NULL
, 曜日番号_from SMALLINT NOT NULL
, 曜日番号_to SMALLINT NOT NULL
, 日番号 SMALLINT NOT NULL
);
CREATE TABLE T_日付
(
日付 DATETIME NOT NULL PRIMARY KEY
);
通報 ...