プロが教える店舗&オフィスのセキュリティ対策術

例えば、1,2,5,8,9,10
というような形でデータを格納するカラムをテーブルに作ろうと思っているのですが設計上ありでしょうか?
格納したあとは、それSELECTのIN(1,2,5,8,9,10)で
使用するのが主で、更新時のキーが別にあればOKという感じでしょうか?
こういう場合に、このような設計をした事があるよ。いった例など教えていただけると幸いです。

A 回答 (3件)

「設計上あり」とは、CSV入出力を考慮しての事でしょうか?



データベースソフトでは、テキスト入出力をする場合に区切り文字をデフォルトの「,」以外にもタブとか任意の文字に設定できることが多いので、その意味では「あり」です。Mysql、firebird、ACCESS、桐いずれもOKです。

あと「更新時のキーが別に云々」のところもよく意味がわからないのですが...

学術的意味合いで「データベースとはかくあるべき」というのがあるのかどうかは知りませんが。
    • good
    • 0
この回答へのお礼

CSV入出力は全く考慮していません。といことは設計上なしかな・・やっぱし。
「更新時のキーが別に云々」というのは、
項目1 項目2
  1  1,3,5,6
で項目2を更新する際に、where 項目1='1'で
更新するという事です。つまり項目2はWHERE句には
入らることはありません。SELECT 項目2 WHERE 項目1='1'の後に、
SELECT * FROM xxテーブル where ID IN ('1','3','5','6');
という使いかは良いでしょうか?という意味で質問させていただきました。最初からこう書いておけばよかったです。すみません。

お礼日時:2004/01/31 18:33

> DBはMySQLで、バージョンは4でLinuxです。



 MySQLはわかりません。が、

> IN('1','2','3')であれば文字列でも数値でも検索にマッチするでしょうか?

 それはあり得ません。もし、'1,5,8'と、'1,4,3'というデータがあって、IN ('1')で検索に引っかかったなら、'123,456'というデータも検索に引っかかります。つまり、人間にとって、というよりCSVファイルとしては文字列中のカンマに「項目を分ける」という“意味”がありますが、データベース中の文字列フィールドに、そんな“意味”はない、あったら困るからです。
#INで文字列も検索できるという前提ですけど
#というか、試してみたら「ダメだ」とわかるでしょう?

 テーブル設計の一例。

主体
ID  その他データ
-- -------
1   なにか
2   これも

複数データ
ID  F_主体   意味
-- ----- ---
1   1      1
2   1      2
3   2      1
4   2      3

-- 複数の行がでる
SELECT * FROM 主体
 LEFT JOIN 複数データ ON F_主体 = 主体.ID
 WHERE 複数データ.意味 IN (1, 2) -- 数値の場合
 WHERE 複数データ.意味 = '1'
  OR 複数データ.意味 = '2' -- 文字列の場合

複数の行で返ってくるので、データベース外(または埋め込みプログラム)でCSV形式にするなりなんなりします。
    • good
    • 1

列に



'1,2,5,8,9,10'
'3,5,7,9'
'4,5,6,7,8'

と格納し、SELECT文で

SELECT * FROM table WHERE column IN (1, 2, 3)

と検索したい、ということでしょうか?
そういうことであれば、できません。

 一部のデータベースでは列を配列にできるようですが、そのようなものであれば、あるいは可能かもしれません。が、それも列の定義を「数値」とした場合です。「数値」と「文字列」は比較できませんので、IN句で(というか、数値で文字列内を)検索することはできません。

 それから、まずは使用している(あるいは予定の)RDBMSの名称とバージョン、プラットフォームを明記してください。

この回答への補足

DBはMySQLで、バージョンは4でLinuxです。IN('1','2','3')であれば文字列でも数値でも検索にマッチするでしょうか?

補足日時:2004/01/31 18:23
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す