1

グループ内の要素を動的に生成するフォームがあるため、誰かがフォームを送信するたびにデータベースに送信するものがいくつあるかわかりません。

Form
  -name
  -age
  -incident (0)
  -incident description (0)
  -incident (1)
  -incident description (1)
  -incident (2....)
  -incident descritpion (2....)

動的に生成されるフォーム要素グループの候補は 10 個ほどあるので、フォーム全体に 1 つのテーブル、動的に生成される要素グループごとに 1 つのテーブルを順番に作成しようと考えていました。

formdata
name varchar(30)
age int(2)
incident0 sql
incdient1 sql

それは可能ですか?または、めったに使用しないテーブルにたくさんの列を作成する以外に別の方法がありますか? たくさんの列を作成すると、メモリが無駄になりますか、それらの列に大量のデータが送信されないと違いはありませんか?

4

3 に答える 3

8

あなたが求める答えはスキーマの正規化と呼ばれ、リレーショナルデータベース管理システムの典型的な機能です。特定の概念は「1対多」の関係と呼ばれ、多くのインシデントに関連する1つの「フォーム」があります。これは、インシデント専用のテーブルを1つ持つことで実現され、そのテーブルの列の1つは、フォームテーブルのid列への数値参照であるため、各インシデントは、どのフォームに属するかを「認識」します。

FORMS
=======
id
name
age

INCIDENTS
============
id
form_id
descrition

次に、SQLは、以下を選択するときに、オプションで結合句を使用できます。

SELECT forms.name, incidents.description
FROM incidents
JOIN FORMS ON (incidents.form_id = forms.id)
于 2012-08-28T20:24:12.283 に答える
2

ある日、10件のインシデントではなく20件のインシデントが発生したくない場合、すべてのコードを変更しますか?正規化された方法でテーブルを作成する必要があります。したがって、2つのテーブルを作成します。

最初のテーブル:フォーム(Form_id、Name、Age)

2番目のテーブル:インシデント(Incident_Id、Form_Id、Description)

于 2012-08-28T20:24:30.843 に答える
1

標準 SQL には ROW 型と MULTISET 型があります。

MULTISET は、ほぼすべての面で TABLE と類似/同一ですが、まったく同じではありません。

そうです、標準 SQL は、値自体が MULTISET である列 (またはそれ以上) がある行で構成されるテーブルの概念をサポートしています。

利用可能な SQL 製品のどれがそれを効果的にサポートしているか (*)、またはそこにある ORM エンジンの特定のサンプルでそのような列を操作する方法を私に聞かないでください。

(*) 答えは「まったくない」かもしれません。この機能をサポートするシステムは、UNNEST オペレーター (および、その名前が私の脳とキーボードの間のどこかで行き詰まった反対方向のカウンターパート) もサポートすることを合理的に期待する必要がありますが、DB2 のようなエンジンでさえサポートしていないようです。それ。

于 2012-08-29T17:57:15.610 に答える