2009-07-17 1 views
2

Ich versuche, die Anzahl der Tabellen in meiner Datenbank zu begrenzen, weil ich das gut höre (Ich bin ein Anfänger Web-Entwickler). Ich möchte, dass der Benutzer eine Liste in die Datenbank eingibt. Sie geben also einen Titel, einen Gesamtkommentar ein und beginnen dann mit der Erstellung der Liste. Ich kann nicht herausfinden, wie das geht, ohne für jede Liste eine neue Tabelle zu erstellen. Weil ein Benutzer beispielsweise eine Liste mit 44 Werten wünscht und ein anderer Benutzer eine Liste mit 10 Werten wünscht. Ich kann mir nicht vorstellen, wie ich das machen soll, ohne für jede Liste eine neue Tabelle zu erstellen. Ich würde wirklich jede Hilfe/Einsicht schätzen, die Sie mir geben können.SQL Datenbank-Design-Hilfe benötigt

Antwort

5

Grundsätzlich möchten Sie eine Tabelle für die Benutzerlisten erstellen, wobei jede Zeile in der Tabelle auf die Listen eines Benutzers und eine andere Tabelle auf die Benutzerlistenwerte verweist, wobei jede Zeile in der Tabelle eine Spalte als Referenz enthält zu der Liste gehört und eine Spalte für den Wert der Benutzereingabe.

0

Ihre Tabelle sein könnte: UserID, int ListID, int (Primary Key-Unique Identifier) ​​ Titel, VarChar (250) Kommentar, VarChar (MAX)

Example Content: 
1 | 1 | The Title  | My Comment 
1 | 2 | The Other Title | My other comment 
2 | 3 | First Comment | Second Person, first comment 

Eacher Benutzer bekommt nur ihre Liste aus einer Abfrage:

Select ListID, Titel, aus the_Table wo UserID Kommentar = @UserID

0

Sie können mit einem einzigen wegkommen Tabelle der Zeilen für alle Listen, sagen wir zum Beispiel einfach

CREATE TABLE ListLines (
    listID INTEGER, 
    lineNo INTEGER, 
    line TEXT, 
    PRIMARY KEY (listID, lineNo), 
    FOREIGN KEY (listID) REFERENCES Lists 
); 

mit der Tabelle der Listen werden:

CREATE TABLE Lists (
    listID INTEGER PRIMARY KEY, 
    userID INTEGER, 
    title TEXT, 
    comment TEXT, 
    FOREIGN KEY (userID) REFERENCES Users 
); 

vorausgesetzt, Sie eine Users Tabelle mit Primärschlüssel userID INTEGER mit pro-Benutzerinformationen haben (Name usw. usw.).

So alle Zeilen einer Liste gegeben zu bekommen seine ID Sie nur

SELECT line FROM ListLines 
WHERE listID=:whateverid 
ORDER BY lineNo; 

oder man konnte UNION dass mit z.B. der titel:

SELECT title AS line FROM Lists 
WHERE listID=:whateverid 
UNION ALL 
SELECT line FROM ListLines 
WHERE listID=:whateverid 
ORDER BY lineNo; 

und so weiter. Diese flexible und effiziente Anordnung ist die relationale Art, Dinge zu tun ...