1

私の Web アプリケーションには、ユーザーが入力しなければならないリスト ボックスがいくつかあります。管理者は、コントロール パネルからコンボ ボックスの値を追加/削除/編集できます。問題は、これらのコンボボックスをデータベースに保持する最良の方法です。

1 つの方法は、コンボ ボックスごとに各テーブルを保持することです。これは非常に扱いやすいと思いますが、コンボ/リスト ボックスごとに 20 以上のテーブルを作成する必要があります。

別の方法は、すべてのコンボ ボックスに対して 1 つのテーブルを保持することです。しかし、この場合データを削除するとき、私は心配しています。コンボボックステーブルの国の列からインドを削除したい場合、問題が発生します。null またはその他の方法で更新する必要があり、プログラミング側でこれを処理する必要がある場合があります。

私は正しいですか。手伝って頂けますか ?

4

4 に答える 4

2

3つのフィールドを持つテーブルを作成するだけでよいと思います。最初のフィールドは ID、2 番目は名前、最後は外部キーです。例えば:

コンボボックステーブル
ID - 名前 - ボックス
1 - 日本 - 1
2 - インド - 1
3 - スコットランド - 2
4 - イギリス - 3

クエリをいじるだけで、各ボックスは最後のフィールドを表します。1 はコンボ ボックス 1 を表し、2 はコンボ ボックス 2 を表します。

あなたがインドを削除したい場合、クエリはid = 2のcombo_box_tableから削除するだけです

これが役に立ちますように

于 2012-12-20T04:13:10.593 に答える
1

コンボ ボックス自体のレベルで追加情報がない限り、コンボ ボックス項目の単純なテーブルで十分です。

CREATE TABLE COMBO_BOX_ITEM (
    COMBO_BOX_ID INT,
    VALUE VARCHAR(255),
    PRIMARY KEY (COMBO_BOX_ID, VALUE)
)

特定のコンボボックスの項目を取得するには:

SELECT VALUE FROM COMBO_BOX_ITEM WHERE COMBO_BOX_ID = <whatever>

このクエリの良いところは、プライマリ インデックスの単純な範囲スキャンで満足できることです。実際、DBMS のクエリ オプティマイザが十分に優れていると仮定すると、テーブル ヒープはまったく変更 されず、テーブルをクラスタ化することでこの「不要な」ヒープを排除できます (DBMS がクラスタリングをサポートしている場合)。物理的には、テーブル全体を表す B ツリーが 1 つだけになることになります。

于 2012-12-20T04:58:22.047 に答える
1

もう 1 つの可能性は、コンボ ボックスのデータを配列または json 文字列としてテーブル内の 1 つのフィールドに保存することですが、これを行うかどうかは、テーブルをどのように機能させたいか、およびアプリケーションが何であるかによって異なります。PHP 配列を MySQL に保存しますか? を参照してください。詳細については。

編集:

さまざまな国のコンボボックスがあり、役職などの別のコンボボックスがあると仮定します。

  1. 複数のテーブルを作成する場合、はい、複数の SQL クエリを使用する必要がありますが、テーブル内のデータの量は柔軟であり、削除は 1 ステップのプロセスになります。

    mysqli_query($link,"DELETE FROM Countries WHERE Name='India'");
    
  2. json または array オプションを使用すると、1 つのテーブルを持つことができ、1 つの列が各コンボ ボックスになります。これは、コンボボックスにデータを入力するために一度だけテーブルをクエリする必要があることを意味しますが、json 文字列をデコードし、それらを反復処理して、たとえば国に 50 のエントリがあり、役職に 20 しかない場合など、null 値をチェックする必要があります。 . 「テキスト」タイプは有限の長さしかないため、データ量にはいくつかの制限があります。(可能ですが、管理するコードの悪夢です)

ボックスに入力するために複数回クエリを実行する必要がある場合がありますが、データベース構造のニーズを誤解していない限り、最初の方法が最も整理されて柔軟になると思います...

3 番目に考えられる答えは、非常に異なりますが、AJAX を使用して、サーバー上の個別の .txt ファイルからコンボ ボックスに入力することです。ただし、ファイルを手動で開いて入力する以外の方法で編集し、オプションを削除または追加します。その中に入れたり、削除したりするのも複雑です。

于 2012-12-20T03:45:14.503 に答える
0

次のように、1 つのテーブルCountriesと別のテーブルをJob Descriptionsセットアップに使用します。

ID | Name  | JobsOffered | Jobs Available
_________________________________________
1  | India | 1,2,7,6,5   | 5,6
2  | China | 2,7,5,      | 2,7
etc.

職務内容

ID |       Name       | Description
___________________________________
1  | Shoe Maker       | Makes shoes
2  | Computer Analyst | Analyzes computers
3  | Hotdog Cook      | Cooks hotdogs well

次に、データベースに国をクエリして、利用可能な (および提供されている) ジョブを取得し、Job Description テーブルに名前をクエリして、利用可能なジョブをユーザーに表示することができます。次に、1 つのジョブが満たされるか、開かれたときに、新しい jobID で contry テーブルを更新するだけです。

これは役に立ちますか?(この場合、提案されているように、各コンボボックスに個別のテーブルが必要であり、利用可能なジョブの参照 ID があります)

于 2012-12-20T14:54:41.597 に答える