2009-08-04 8 views
1

Im Teil einer Website, die ich entwerfe, gibt es einen Abschnitt, der sowohl vordefinierte Werte als auch die Option zum Angeben benutzerdefinierter Werte enthält.Datenbankentwurf für Werte, die manchmal vordefiniert und manchmal benutzerdefiniert sind

Als ein einfaches Beispiel nehmen wir an, dass die Werte "Sport" sind und dass die Anwendung vordefinierte Sportarten hat, aber dass einige Benutzer ihre eigenen eingeben möchten, da ich nicht alles vorhersagen kann. Benutzer haben keinen Zugriff auf die Sportarten, die andere eingegeben haben, nur ihre eigenen.

Sollten die vordefinierten Sportarten und die benutzerdefinierten Sportarten in derselben Tabelle gespeichert sein? In diesem Fall muss ich entweder einer Spalte user_id in dieser Tabelle den Wert null geben oder einen Benutzer und eine Benutzer-ID für die vordefinierten Sportarten erstellen.

Die meiste Zeit, wenn ich nach einer Sportart nach dem Namen suche, werde ich sowohl vordefinierte als auch die benutzerdefinierten Sportarten des Benutzers suchen wollen, wenn die vordefinierten und benutzerdefinierten Sportarten getrennt sind, würde ich immer noch die Suche über beide gehen lassen müssen Tabellen.

Auf der anderen Seite, wenn sie getrennt sind, erschwert es die Angabe von Fremdschlüsselbeziehungen basierend auf einer sport_id.

Was ist ein guter Weg, um diese Art von Situation zu nähern?

Antwort

1

Ich sehe kein Problem mit vordefinierten und benutzerdefinierten Werten in einer Tabelle (vielleicht könnten Sie ein Bit-Flag verwenden, um "benutzerdefiniert" anzuzeigen, falls Sie später etwas mit ihnen machen müssen). Und Sie könnten leicht einen Identitätswert als Primärschlüssel in dieser Tabelle angeben, daher sollte es kein Problem geben, Fremdschlüsselbeziehungen anzugeben.

Die einzigen Probleme, die Sie haben werden, sind Dupes und Fehlbuchstabierungen.

+0

Ich markierte dies als die Antwort, aber der Kommentar von Jug, der zu der Frage hinzugefügt wurde, ist genauso gut wie eine Antwort. –

0

Ich würde dies als eine Viele-zu-viele-Beziehung implementieren. Tabelle 1 - Sport (sport_id, sport_name, system_defined) Tabelle 2 - Benutzer (user id, benutzer_name) Tabelle 3 - users_x_sports (User_id, sport_id)

Wenn der Raum an einer Prämie nicht, die users_x_sports Tabelle verbindet Nutzer der Benutzer definiert Sport und das System definiert Sport.

Wenn der Platz knapp ist, verwenden Sie eine UNION, um die vom System definierten und benutzerdefinierten Sportarten zu suchen. Verknüpfen Sie Benutzer nur mit ihren benutzerdefinierten Sportarten.

Die Platzeinsparungen bei der Normalisierung des Sports und der Reduzierung von Duplikaten können die zusätzlichen Links in der Tabelle "users_x_sports" kompensieren.

Verwandte Themen