Was ist die besten Praktiken in db Design wenn ich einen Wert speichern mag, die entweder aus einer Dropdown-Liste oder vom Benutzer eingegebenen ausgewählt ist?

StackOverflow https://stackoverflow.com/questions/406550

Frage

Ich versuche, den besten Weg zu finden, um die Datenbank zu entwerfen, um das folgende Szenario zu ermöglichen:

  1. Der Benutzer einer Dropdown-Liste der Universitäten (zum Beispiel) dargestellt wird
  2. Der Benutzer wählt seine / ihre Universität aus der Liste, wenn es vorhanden ist
  3. Wenn die Universität nicht existiert, sollte er seine eigene Universität in einem Textfeld (Art wie andere: [___________]) eingeben

Wie soll ich die Datenbank entwerfen solche Situation zu handhaben gegeben, dass ich mit der Universität ID zum Beispiel sortieren möchten (wahrscheinlich nur für die in Universitäten gebaut und nicht die von Nutzern eingegeben sind)

Danke!

Ich möchte nur, um es ähnlich wie bei Facebook diese Situation behandelt. Wenn der Benutzer seine Ausbildung (durch tatsächlich in den Combobox eingeben, die nicht meine Sorge ist) und einer der zurückgegebenen Werte der Wahl, was würde Facebook tun?

In meiner Vermutung, würde es den Benutzer-ID ein und laden den EducationID in einer many-to-many-Tabelle. Was nun, wenn der Benutzer die Eingabe ist nicht in der Datenbank überhaupt? Es wird nach wie vor in seinem Profil gespeichert, aber wo? Eingabe von "St" ... was darauf hindeutet, Stanford

War es hilfreich?

Lösung

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
);

Öffentlichkeit zu 1 für die Unis im System festgelegt ist, und 0 für die vom Benutzer eingegebene-uni.

Andere Tipps

Sie könnte Cheat: wenn Sie nicht Sorgen um die referentielle Integrität dieses Feldes (dh es ist nur dort in einem Benutzerprofil zu zeigen, und ist nicht für die strikt durchgesetzt Geschäftsregeln erforderlich) , speichern sie es als eine einfache VARCHAR Spalte.

Für Ihre Dropdown-Liste verwenden, um eine Abfrage wie:

SELECT DISTINCT(University) FROM Profiles

Wenn Sie Fehler oder Einzelanfertigungen, um herauszufiltern, versuchen Sie:

SELECT University FROM PROFILES
GROUP BY University
HAVING COUNT(University) > 10  -- where 10 is an arbitrary threshold you can tweak

Wir verwenden diesen Code in einem unserer Datenbanken für die Handelsbezeichnungen von Fremdfirmen zu speichern; da dies nur zu Informationszwecken ist (es gibt einen separaten „Kategorie“ Bereich Geschäftsregeln für die Durchsetzung) ist es eine akzeptable Lösung.

Halten Sie eine Flagge für die Zeilen durch eine Benutzereingabe in der gleichen Tabelle eingegeben, wie Sie Ihre anderen Datenpunkte. Dann können Sie die Flagge sortieren verwenden.

Eine Möglichkeit, dies in einer früheren Firma gelöst wurde ich arbeitete an:

Erstellen Sie zwei Spalten in der Tabelle:  1) eine nullable-ID des Systems bereitgestellte Zeichenfolge (in einer separaten Tabelle gespeichert ist)  2) der Benutzer gelieferten Zeichenfolge

Nur eine davon ist bevölkert. Eine Einschränkung kann diese durchzusetzen (und zusätzlich, dass mindestens einer dieser Säulen wird aufgefüllt, wenn zutreffend).

Es ist zu beachten, dass das Problem, das wir mit diesem eine echten „Andere“ war die Lösung wurden Situation. Es war eine textuelle Beschreibung eines Artikels mit einigen voreingestellten Standardwerte. Ihre Situation klingt wie eine tatsächliche Einheit, die nicht in der Liste enthalten ist, S. T. mehr als ein Benutzer die gleiche Universität Eingang interessiert sein könnte.

Dies ist keine Datenbank-Design-Problem. Es ist eine UI-Ausgabe.

Die Dropdown-Liste der Universitäten auf Zeilen in einer Tabelle. Diese Tabelle muss eine neue Zeile eingefügt hat, wenn der Benutzer in einer neuen Universität in das Textfeld.

Wenn Sie die Liste trennen möchten, dass Sie sich von denen von anderen Nutzern hinzugefügt bereitgestellt, können Sie eine Spalte in der Universität Tisch mit Ursprung (oder Herkunft) der Daten.

Ich bin mir nicht sicher, ob die Frage hier sehr klar ist.

Ich habe ziemlich dies ein paar Mal bei der Arbeit getan und wählen Sie einfach zwischen entweder der Dropdown-Liste eines Textfeldes. Wenn die Daten in dem Textfeld eingegeben wird dann zunächst ich in die Datenbank einfügen und dann IDENTITY verwenden, um die eindeutige Kennung des eingefügten Zeile für weitere Fragen zu erhalten.

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

Dies ist gegen MS SQL 2008, obwohl ich nicht sicher bin, ob die @@ SCOPE_IDENTITY () global in anderen Versionen von SQL vorhanden ist, aber ich bin sicher, dass es Mittel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top