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
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.
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
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 ...