Я пытаюсь ограничить таблицами в моей базе данных, потому что я слышал, что это хорошо (я начинающий веб-разработчик). Я хочу, чтобы пользователь вводил список в базу данных. Поэтому они вводят заголовок, общий комментарий, а затем начинают составлять список. Я не могу понять, как это сделать, не создавая новую таблицу для каждого списка. Потому что, скажем, одному пользователю нужен список с 44 значениями, а другой пользователь хочет иметь список из 10 значений. Я не могу придумать, как это сделать, не создавая новую таблицу для каждого списка. Я бы очень признателен за любую помощь/понимание, которое вы можете мне дать.Требуется помощь в разработке базы данных SQL
ответ
В принципе, вы хотите создать таблицу для списков пользователей, где каждая строка в таблице относится к спискам одного пользователя и другая таблица для значений списка пользователей, где каждая строка в таблице имеет столбец для ссылки к списку, которому он принадлежит, и столбцу для значения, которое вводит пользователь.
Ваша таблица может быть: Идентификатор_пользователя, внутр ListID, INT (Первичный ключ-Unique Identifier) Название, VarChar (250) Комментарий, 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 Пользователь просто получает их список из запроса:
Выберите ListID, Titel, комментарий от the_Table где UserID = @UserID
Вы можете уйти с одним таблица строк для всех списков, скажем, например, просто
CREATE TABLE ListLines (
listID INTEGER,
lineNo INTEGER,
line TEXT,
PRIMARY KEY (listID, lineNo),
FOREIGN KEY (listID) REFERENCES Lists
);
с таблицей списков становится:
CREATE TABLE Lists (
listID INTEGER PRIMARY KEY,
userID INTEGER,
title TEXT,
comment TEXT,
FOREIGN KEY (userID) REFERENCES Users
);
при условии, у вас есть Users
таблицы с первичным ключом userID INTEGER
с каждым пользователя информации (имя , и т. д.).
Таким образом, чтобы получить все строки списка с учетом ее ID вы просто
SELECT line FROM ListLines
WHERE listID=:whateverid
ORDER BY lineNo;
или вы могли бы UNION, что, например, с название:
SELECT title AS line FROM Lists
WHERE listID=:whateverid
UNION ALL
SELECT line FROM ListLines
WHERE listID=:whateverid
ORDER BY lineNo;
и так далее. Эта гибкая и эффективная организация - это реляционный способ ведения дел ...