Django では、複合キーをサポートしていないとあります。
「一つのオブジェクトには一つしか主キーを指定できません。」
http://djangoproject.jp/doc/ja/1.0/ref/models/fields.html#primary-key
複合キーについて以下の疑問があります。
私は Web アプリケーションの開発経験がないので、
概念的なことも含めてご教示頂ければ嬉しいです。
1. 複合キーを用いた既存スキーマからの移行
Django では、どのようなモデルを構築すべきなのでしょうか?
2. どうしても複合キーを使いたいとき
以下のようなやり方が正しいのでしょうか?
「djangoのモデルのフィールドを組み合わせで一意にする 」
http://snippets.hachinos.net/lang/python/user/piro_suke/1/
3. 複合キーのメリット・デメリット
少し古いですが Rails や CakePHP でも
複合キーをサポートしないという議論があることを知りました。
http://cakephp.seesaa.net/article/46624086.html
複合キーをサポートしない根拠が私にはよく分かりません。
仕様であれば、それはそれで良いのですが、
複合キーをサポートするデメリットの有無が分かりません。
例えば、以下のようなスキーマの場合、id の代理キーを使うよりも、
複合キーを使った方が構造的にシンプルで、
パフォーマンス的にもメリットがあるように私は思います。
※ 私が RDB を中心に考えているので疑問に思うのですが、、、
グループマスタ
- グループID Pkey
- グループ名
個別マスタ
- 個別 ID Pkey
- グループ ID Pkey
- 名前
以上、宜しくお願いします。
2009/06/19 16:22 に Morimoto Tetsuya<tetsuya....@gmail.com> さんは書きました:
>
> 初めて投稿します。森本と申します。
>
> 1. 複合キーを用いた既存スキーマからの移行
> Django では、どのようなモデルを構築すべきなのでしょうか?
複合PK前提で構築されている既存スキーマのまま、は現実的に
は厳しいと思います。
#そんなことないって突っ込み大歓迎
> 2. どうしても複合キーを使いたいとき
> 以下のようなやり方が正しいのでしょうか?
> 「djangoのモデルのフィールドを組み合わせで一意にする 」
> http://snippets.hachinos.net/lang/python/user/piro_suke/1/
この方法をとるのが通常とされているはずです。
複合Indexなんかは出力されなかったと思います。
> 3. 複合キーのメリット・デメリット
> 少し古いですが Rails や CakePHP でも
> 複合キーをサポートしないという議論があることを知りました。
> http://cakephp.seesaa.net/article/46624086.html
>
> 複合キーをサポートしない根拠が私にはよく分かりません。
> 仕様であれば、それはそれで良いのですが、
> 複合キーをサポートするデメリットの有無が分かりません。
>
> 例えば、以下のようなスキーマの場合、id の代理キーを使うよりも、
> 複合キーを使った方が構造的にシンプルで、
> パフォーマンス的にもメリットがあるように私は思います。
> ※ 私が RDB を中心に考えているので疑問に思うのですが、、、
単純に、次のような理由でサポートしないのではないかと推測しています。
・1行を指し示すために複数の値を指定したくない
・PKにユニーク+インデックスという二つの意味があるのが気に食わない
RDB側からの設計でも余程の理由がなければ複合PKは使われなくなっ
てきていると思い込んでいたのですが、そうでもないようですね。
> グループマスタ
> - グループID Pkey
> - グループ名
>
> 個別マスタ
> - 個別 ID Pkey
> - グループ ID Pkey
> - 名前
これって個別 IDは個別マスタの代理キーです?
代理キー+外部キーの複合PKってあまり見かけないので、
複合PKにするメリットを後学のために教えていただける
とうれしいです。
グループIDでクラスタ化されて速い!とか!?