耇合キヌの実装たたは代替方法に぀いお

3,137 views
Skip to first unread message

Morimoto Tetsuya

unread,
Jun 19, 2009, 3:22:36 AM6/19/09
to djan...@googlegroups.com
初めお投皿したす。森本ず申したす。
Django で Web アプリケヌションの開発方法を孊び始めた初心者です。

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
- 名前

以䞊、宜しくお願いしたす。

Makoto Uemura

unread,
Jun 19, 2009, 3:49:51 AM6/19/09
to djan...@googlegroups.com
uemuraです。

Djangoに限らず䞀般的なWebフレヌムワヌクではprimarykeyはid (auto increment)
きめうちだず思いたす。

耇数primarykeyを採甚するずモデル偎が耇雑になりすぎるのが理由だず思われたす。

SQLAlchemyなら耇数PrimaryKeyでも扱えるので、
DjangoのO/Rマッパヌを䜿わず
管理画面が䜿えないなどの
デメリットを承知でSQLAlchemyを採甚するか
SQLAlchemyを䜿っおフレヌムワヌクを自䜜するしかないのが珟状だず思いたす。


2009/6/19 Morimoto Tetsuya <tetsuya....@gmail.com>:

tsuyuki makoto

unread,
Jun 19, 2009, 1:46:17 PM6/19/09
to djan...@googlegroups.com
露朚です。

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でクラスタ化されお速いずか

Morimoto Tetsuya

unread,
Jun 20, 2009, 7:52:35 PM6/20/09
to djan...@googlegroups.com
uemura さん

森本です。

早速のご返信ありがずうございたす。

> SQLAlchemyなら耇数PrimaryKeyでも扱えるので、
O/R マッパヌを倉曎するずいう方法もあるのですね。ずおも参考になりたす。
管理画面を䜿えないデメリットは蚱容できるのでちょっず詊しおみたいず思いたす。

2009/06/19 16:49 Makoto Uemura <makoto...@gmail.com>:

Morimoto Tetsuya

unread,
Jun 20, 2009, 8:28:38 PM6/20/09
to djan...@googlegroups.com
露朚さん

森本です。

䞁寧にご返信ありがずうございたす。

> RDB偎からの蚭蚈でも䜙皋の理由がなければ耇合PKは䜿われなくなっ
> おきおいるず思い蟌んでいたのですが、そうでもないようですね。
私の携わったプロゞェクトでそのように蚭蚈しおいたので、
そういうものかなず勝手に思い蟌んでいるだけになりたす。
䞀般的にどのように蚭蚈すれば良いずいうのは私は分かっおいたせん。

ただ、パフォヌマンス的なメリットを考慮するず、
意味のない数倀 id キヌをプラむマリキヌにするのは、
個人的にもったいない気がしおしたうのですね(^ ^;;
プラむマリキヌ = ナニヌク + むンデックス + Not NULL が自動生成されたす。
特にむンデックスはたくさん匵れば匵るほど、
参照/曎新凊理のパフォヌマンスに圱響を䞎えるので、
無意味なむンデックスを匵りたくないず思っおしたいたす。
※ 1床に数千䞇件デヌタをむンサヌトするようなバッチ系凊理を䜜っおたからかな

> 代理キヌ倖郚キヌの耇合PKっおあたり芋かけないので、
> 耇合PKにするメリットを埌孊のために教えおいただける
> ずうれしいです。
> グルヌプIDでクラスタ化されお速いずか
私の意図があっおいるかどうか分からないので詳现に曞きたす。
個別マスタずグルヌプマスタを持っおおけば、
柔軟なスキヌマ定矩ができたす。

䟋えば、商品マスタず地域別商品マスタを考えたす。
ちゃんず正芏化するず以䞋になるのかな。

商品マスタ
- 商品コヌド PKey
- 商品名
- メヌカヌ

地域グルヌプマスタ
- 地域コヌド PKey
- 地域名
- 原䟡

商品地域グルヌプ関連テヌブル
- 商品コヌド PKey
- 地域コヌド PKey

ある商品の原䟡ずいう項目に着目するず、
原䟡は、北海道ず東京ず倧阪で違ったりしたす。
商品情報は商品マスタに持぀けれど、
原䟡情報は地域グルヌプマスタに持ちたいずしたす。

1぀の地域に察しお1぀の商品が1぀の原䟡を持぀ので、
商品ず地域の組合せをナニヌクにしたいのですね。
そういうずきに䞊蚘のように耇合キヌを蚭けるのが
䞀般的なのかなず私は勝手に思い蟌んでいたす。
耇合キヌを䜿えない堎合、こういうずきに
どのような蚭蚈をすれば良いのでしょうか


2009/06/20 2:46 tsuyuki makoto <mtsu...@gmail.com>:

makoto tsuyuki

unread,
Jun 22, 2009, 11:39:01 AM6/22/09
to django-ja
露朚です。

On 6月21日, 午前9:28, Morimoto Tetsuya <tetsuya.morim...@gmail.com> wrote:
> 森本です。
>
> > RDB偎からの蚭蚈でも䜙皋の理由がなければ耇合PKは䜿われなくなっ
> > おきおいるず思い蟌んでいたのですが、そうでもないようですね。
>
> 私の携わったプロゞェクトでそのように蚭蚈しおいたので、
> そういうものかなず勝手に思い蟌んでいるだけになりたす。
> 䞀般的にどのように蚭蚈すれば良いずいうのは私は分かっおいたせん。
>
> ただ、パフォヌマンス的なメリットを考慮するず、
> 意味のない数倀 id キヌをプラむマリキヌにするのは、
> 個人的にもったいない気がしおしたうのですね(^ ^;;
> プラむマリキヌ = ナニヌク + むンデックス + Not NULL が自動生成されたす。
> 特にむンデックスはたくさん匵れば匵るほど、
> 参照/曎新凊理のパフォヌマンスに圱響を䞎えるので、
> 無意味なむンデックスを匵りたくないず思っおしたいたす。
> ※ 1床に数千䞇件デヌタをむンサヌトするようなバッチ系凊理を䜜っおたからかな

数千䞇件のバッチ凊理ずかになるず、もうO/Rの出番ではないし、むンデックスも
むンサヌト時は再䜜成をされない状態にしお、ずか色々話は倉わっおきたすね。

> > 代理キヌ倖郚キヌの耇合PKっおあたり芋かけないので、
> > 耇合PKにするメリットを埌孊のために教えおいただける
> > ずうれしいです。
> > グルヌプIDでクラスタ化されお速いずか
>
> 私の意図があっおいるかどうか分からないので詳现に曞きたす。
> 個別マスタずグルヌプマスタを持っおおけば、
> 柔軟なスキヌマ定矩ができたす。
>
> 䟋えば、商品マスタず地域別商品マスタを考えたす。
> ちゃんず正芏化するず以䞋になるのかな。
>
> 商品マスタ
> - 商品コヌド PKey
> - 商品名
> - メヌカヌ
>
> 地域グルヌプマスタ
> - 地域コヌド PKey
> - 地域名
> - 原䟡
>
> 商品地域グルヌプ関連テヌブル
> - 商品コヌド PKey
> - 地域コヌド PKey

こういう圢は芋慣れおいたす :)
Reply all
Reply to author
Forward
0 new messages