dポイントプレゼントキャンペーン実施中!

格納するデータの数が決められていない場合のテーブルのつくりかたについて質問です。

予め入力項目数が決定している時は、その数に合わせて列をつくればいいのですが、大きい入力用テキストボックスが一つだけあって、ユーザにaaa,bbb,ccc,123といったようにデータを入力してもらい、カンマで区切られた一つひとつのデータをデータベースに格納するといったことをしたい場合、データが一つだけの場合も100を越えるような場合もあるので、テーブルをどのように構築すればいいのか困っています。

アドバイスお願いいたします。

A 回答 (3件)

KELU_NKUNさんのイメージでは、こんなテーブルを作りたいということでしょうか?



test_table
user_id, value1, value2, value3, value4
----------------------------------------
1, aaa, bbb, ccc, 123
2, xxx, eee, kkk,

上記テーブル構造では入力値の数が4つまでに対応してますが、
もしユーザーによってデータ数が5つ以上となる場合は無理です。
5つ以上のデータ数に対応する為には、ユーザーの入力値の最大データ数を決めておかなければなりません。
最大データ数を100とするなら、value1~value100までのフィールドを作っておけばいいだけです。

もし最大データ数を決めておけない場合は、
ユーザーデータ格納時に、現在のvalueフィールドの数と、今から格納するデータ数の差を計算して
足りないフィールド数がある場合は、その分のフィールドを追加⇒その後ユーザーデータを格納。
といったことをすれば大丈夫でしょう。

ただ、こういった構造にしてしまうと、データを引っ張って来るときなどが面倒だと思います。

なので、行を増やしていく方法が良いと思います。
さっきのテーブルを行を増やす方法にするとこんなイメージになります。

test_table
user_id, value
----------------------------------------
1, aaa
1, bbb
1, ccc
1, 123
2, xxx
2, eee
2, kkk
    • good
    • 0

列を増やすのではなく、一つ一つに同じIDをふってデータとして登録すれば


よいだけです。
    • good
    • 0

ここのカテゴリ通り、RDBMSはMySQLなのでしょうか?



RDBMSにより異なりますが、表を構成する列数の上限は、そんなに多くありません。512だったり1024とかです。
また、カンマ区切りといったデータを1列に格納するというは、柔軟な操作性を提供してくれるSQLを、わざわざ使いにくくし、改造がしにくく、性能を上げたりといった工夫ができなくなる場合が多いです。

ただ、列数が多いと、性能が極端に悪くなるRDBMS、バージョンもあるため、大規模なシステムで性能を出したい場合、表定義上は1個の列を、アプリ側で複数フィールドの値として操作するといったことを敢えて行う場合もあります。

しかし、KELU_NKUNさんが考えてるのは、そういったシステムではないですよね?
ちゃんと正規化し、列で管理するのでなく、行で管理することを考えましょう。
    • good
    • 0

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