Aide de design de database SQL nécessaire

J'essaye de limiter le sujet des tables dans ma database parce que j'entends que c'est bon (je suis un développeur web novice). Je veux que l'user entre une list dans la database. Alors ils entrent un titre, un commentaire général, puis commencent à faire la list. Je ne peux pas comprendre comment faire ceci sans faire une nouvelle table pour chaque list. Parce que, disons un user veut une list avec 44 valeurs et un autre user veut une list de 10 valeurs. Je ne peux pas penser à comment faire ceci sans faire une nouvelle table pour chaque list. J'apprécierais vraiment toute aide / perspicacité que vous pouvez me donner.

Fondamentalement, vous voulez faire une table pour les lists d'users, où chaque ligne de la table fait reference aux lists d'un user, et une autre table pour les valeurs de list d'users, où chaque ligne de la table a une colonne pour une reference à la list appartient à, et une colonne pour la valeur de l'input de l'user.

Votre table peut être: UserID, int ListID, int (identificateur unique de key primaire) Title, VarChar (250) Comment, 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 

L'user d'Eacher obtient juste leur list d'une question:

Sélectionnez ListID, Titel, Commentaire FROM the_Table où UserID = @UserID

Vous pouvez vous en sortir avec une seule table de lignes pour toutes les lists, disons par exemple simplement

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

avec la table des lists devenant:

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

en supposant que vous avez une table Users avec la key primaire userID INTEGER avec des informations par user (nom, etc, etc).

Donc, pour get toutes les lignes d'une list count tenu de son identité, vous venez de

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

ou vous pourriez UNION avec par exemple le titre:

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

etc. Cet arrangement flexible et efficace est la manière relationnelle de faire les choses …