脳みそスワップアウト

揮発性なもので。おもにPHPのこととか。

履歴付きデータ

社員の部署移動や、市町村の統廃合など、
あるデータに変更があったが過去の情報も残しておきたい場合によく使うパターン。

pkeyを開始日+xxの複合キーにする。
終了日をNOT NULLで定義、継続中のデータはカラムの最大値を設定する。

CREATE TABLE emp (
  begin_date DATE NOT NULL,
  end_date DATE NOT NULL,
  emp_id INT NOT NULL,
  emp_name VARCHAR(50) NOT NULL,
  dept_id INT NOT NULL,
  PRIMARY KEY (BEGIN_DATE, EMP_ID)
);

そしてこんな感じでSELECT

SELECT emp_id, emp_name
  FROM emp
 WHERE '2013-04-01' BETWEEN begin_date AND end_date


やっぱりこの形が一番好み。