- - PR -
ユニークIDのつけかた
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-03-10 15:00
こんにちは。
とある顧客管理DBをMySQLもしくはPostgreSQLで作ろうと思っています。 顧客データ table client_id | client_name | status | ---------------------------------- 100 | hoge | 0 101 | piyo | 0 取引履歴データ table client_id | history_date ------------------------ 100 | 2008-03-08 100 | 2008-02-29 101 | 2008-02-28 というような、2つのテーブルがあった場合、取引履歴データから、顧客データへ INNER JOIN してデータを引っ張ろうとしています。 SELECT * FROM 取引履歴データ INNER JOIN 顧客データ ON 取引履歴データ.client_id = 顧客データ.client_id; ただ、顧客基本データを編集する際に「即時反映」と「承認待ち」の2つの方法を用意したいと思っています。 顧客データの status というカラムが 0 の場合は本番データ、 1 の場合は承認待ちデータという分けにした場合、即時反映の場合は、そのまま UPDATE で良いのですが、承認待ちを作る際に、顧客データをコピーして1レコード INSERT で増やさなくてはなりません。 顧客データ table client_id | client_name | status | ---------------------------------- 100 | hoge | 0(本番データ) 101 | piyo | 0 100 | hoge_edit | 1(承認待ちデータ) この場合、client_id が同じ物が存在するので、これをユニークIDとして使うことはできなくなってしまいます。こんな時は、どのような設計をするのが一般的なのでしょうか? ちなみに、client_id は変更したくありません(取引履歴データも全てUPDATEしなくてはならないので)。 | ||||
|
投稿日時: 2008-03-10 16:46
client_id 列と status 列の2つの列を「複合キー」として使うことができるのではないでしょうか? 2つの列を組み合わせて、主キーにすることもできます。 | ||||
|
投稿日時: 2008-03-11 13:46
statusが増えることを考慮すると、枝番を加えて複合主キーとするのも手だと思います。
また、本番データと承認待ちデータのテーブルを別々に用意する手もありますね。 (承認時に本番データにデータを移す) |
1