8

次のシナリオを可能にするために、データベースを設計する最善の方法を見つけようとしています。

  1. ユーザーには、大学のドロップダウンリストが表示されます(例)
  2. ユーザーは、リストから自分の大学を選択します (存在する場合)。
  3. 大学が存在しない場合は、テキスト ボックスに自分の大学を入力する必要があります (その他: [___________] のようなもの)。

たとえば、大学IDを使用してソートしたい場合に、このような状況を処理するためにデータベースをどのように設計する必要がありますか(おそらく、ユーザーが入力したものではなく、組み込みの大学のみ)

ありがとう!

Facebookがこの状況を処理する方法と同じようにしたいだけです. ユーザーが自分の教育を選択し (コンボボックスに実際に入力することによって)、返された値のいずれかを選択した場合、Facebook はどうするでしょうか?

私の推測では、多対多テーブルに UserID と EducationID が挿入されます。入力しようとしているユーザーがデータベースにまったくない場合はどうなるでしょうか。それはまだ彼のプロフィールに保存されていますが、どこに? タイピング

存在しない大学を入力

4

6 に答える 6

6
CREATE TABLE university
(
  id smallint NOT NULL,
  name text,
  public smallint,
  CONSTRAINT university_pk PRIMARY KEY (id)
);

CREATE TABLE person
(
  id smallint NOT NULL,
  university smallint,
  -- more columns here...
  CONSTRAINT person_pk PRIMARY KEY (id),
  CONSTRAINT person_university_fk FOREIGN KEY (university)
      REFERENCES university (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
);

public は、システム内の Unis に対して 1 に設定され、user-entered-unis に対して 0 に設定されます。

于 2009-01-02T11:41:33.397 に答える
2

不正行為をする可能性があります。このフィールドの参照整合性について心配していない場合(つまり、ユーザーのプロファイルに表示されるだけで、厳密に適用されるビジネスルールには必要ない場合)、単純なVARCHAR列として保存します。

ドロップダウンには、次のようなクエリを使用します。

プロファイルからDISTINCT(大学)を選択

タイプミスや1回限りの問題を除外する場合は、次のことを試してください。

プロファイルから大学を選択
大学によるグループ化
HAVING COUNT(University)> 10-ここで、10は微調整できる任意のしきい値です。

このコードは、請負業者の取引の説明を保存するためにデータベースの1つで使用されます。これは情報提供のみであるため(ビジネスルールを適用するための個別の「カテゴリ」フィールドがあります)、許容できるソリューションです。

于 2009-01-02T12:08:26.120 に答える
1

ユーザー入力によって入力された行のフラグを、他のデータ ポイントと同じテーブルに保持します。次に、フラグを使用して並べ替えることができます。

于 2009-01-02T11:37:38.953 に答える
1

これは、私が以前働いていた会社で解決された方法の 1 つです。

テーブルに 2 つの列を作成します。1) システム提供の文字列の null 許容 ID (別のテーブルに格納されます) 2) ユーザーが提供する文字列

これらのうちの 1 つだけが取り込まれます。制約により、これを強制できます (さらに、必要に応じて、これらの列の少なくとも 1 つに値を入力する必要があります)。

これで解決していた問題は、真の「その他:」状況であったことに注意してください。これは、いくつかの既定値があらかじめ設定されたアイテムのテキストによる説明でした。あなたの状況は、リストにない実際のエンティティのように聞こえます。複数のユーザーが同じ大学を入力したい場合があります。

于 2009-01-02T11:43:50.023 に答える
-1

これはデータベースの設計上の問題ではありません。UIの問題です。

大学のドロップ ダウン リストは、テーブルの行に基づいています。ユーザーが新しい大学をテキスト ボックスに入力すると、そのテーブルに新しい行が挿入される必要があります。

提供したリストをユーザーが追加したリストから分離したい場合は、University テーブルにデータの出所 (または来歴) を含む列を作成できます。

于 2009-01-02T11:37:23.510 に答える
-2

ここで質問が非常に明確かどうかはわかりません。

私は職場でこれをかなりの回数行いましたが、テキスト ボックスのドロップダウン リストから選択するだけです。データがテキスト ボックスに入力されている場合は、最初にデータベースに挿入してから、IDENTITY を使用して、追加のクエリのために挿入された行の一意の識別子を取得します。

INSERT INTO MyTable Name VALUES ('myval'); SELECT @@SCOPE_IDENTITY()

これは MS SQL 2008 に対するものですが、 @@SCOPE_IDENTITY() グローバルが SQL の他のバージョンに存在するかどうかはわかりませんが、同等のものがあると確信しています。

于 2009-01-02T11:39:52.553 に答える