- - PR -
データベース設計について教えてください
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-01-30 15:24
現在、PostgreSQL8を利用してアプリケーションを作ろうと思っているのですが、データベースの設計に悩んでいます。
■店舗テーブル 店舗ID|店舗名 -------------- 100000|あいう 100001|かきく ■特徴テーブル 特徴ID|特徴名 -------------- 0|特徴1 1|特徴2 ■店舗-特徴テーブル 店舗ID|特徴ID -------------- 100000| 0 100001| 0 100001| 1 「特徴」の項目数が固定であれば、店舗テーブル内に「特徴1」「特徴2」のようなカラムを設定して1つのテーブルにまとめる事も可能なのですが、「特徴」の項目自体は増減する事があるので3つのテーブルに分けました。 ただ、そうすると「特徴」項目で検索をするときに、1つのSQLだと検索が出来なくなってしまいました。アプリケーション側で、なんとかすることはできるのですが、データベースだけで解決する方法はないでしょうか? 例)特徴に特徴ID「0」と「1」がある店舗IDを知りたい | ||||||||
|
投稿日時: 2008-01-30 15:36
こんなんじゃだめですかね。
動作確認はしてませんけど。 | ||||||||
|
投稿日時: 2008-01-30 16:15
指定する特徴が増えた場合を考えると
一郎様の提示コードでは、対応しきれないかもしれませんね。 私の提示コードも、ちょっと無理矢理すぎるかもしれませんが・・・。 店舗-特徴テーブルのキーが店舗ID+特徴IDであるという前提で・・・
で、どうでしょうかね。 特徴IDはIn句で。HAVINGでIn句に使った特徴の数を指定。 | ||||||||
|
投稿日時: 2008-01-30 16:48
仕様として疑問・・・ 「特徴」「特徴2」のカラムなんて持つ必要ないんじゃないですか? そもそも店舗には必ず特徴があるんですよね? 店舗テーブルに 特徴IDをもてばいいのでは?
上記のテーブル構造なら問題なしですね。。 [ メッセージ編集済み 編集者: 地図 編集日時 2008-01-30 16:55 ] | ||||||||
|
投稿日時: 2008-01-30 17:15
これって設計の話ですよね。
せっかくなので配列を使うのではダメですか? ■店舗テーブル 店舗ID|店舗名|特徴ID ----------------------- 100000|あいう|ARRAY[0] 100001|かきく|ARRAY[0, 1] ■特徴テーブル 特徴ID|特徴名 -------------- 0|特徴1 1|特徴2 | ||||||||
|
投稿日時: 2008-01-30 17:22
上記の条件を満たすSQLでよければ下記のSQLを参考にして下さい。 今回は特徴IDに0と1が設定されているものとの事でしたので、INTERSECT演算子を使用 してSQL文を繋げています。 単一の特徴IDを検索する場合は、SQLを分けて使用するとよいかと。
| ||||||||
|
投稿日時: 2008-01-30 17:35
みなさま、アドバイスありがとうございます。
INTERSECT演算子In句というのがあるのを初めて知りました。 これであればこのテーブル構造のまま目的が達成できそうです。 また、複数項目を一つの絡むに収めるために配列を使うという発想もありませんでした。 テストとして色々と試してみたいと思います。 本当にありがとうございました。 |
1