2009-07-17 1 views
2

Я пытаюсь ограничить таблицами в моей базе данных, потому что я слышал, что это хорошо (я начинающий веб-разработчик). Я хочу, чтобы пользователь вводил список в базу данных. Поэтому они вводят заголовок, общий комментарий, а затем начинают составлять список. Я не могу понять, как это сделать, не создавая новую таблицу для каждого списка. Потому что, скажем, одному пользователю нужен список с 44 значениями, а другой пользователь хочет иметь список из 10 значений. Я не могу придумать, как это сделать, не создавая новую таблицу для каждого списка. Я бы очень признателен за любую помощь/понимание, которое вы можете мне дать.Требуется помощь в разработке базы данных SQL

ответ

5

В принципе, вы хотите создать таблицу для списков пользователей, где каждая строка в таблице относится к спискам одного пользователя и другая таблица для значений списка пользователей, где каждая строка в таблице имеет столбец для ссылки к списку, которому он принадлежит, и столбцу для значения, которое вводит пользователь.

0

Ваша таблица может быть: Идентификатор_пользователя, внутр 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

0

Вы можете уйти с одним таблица строк для всех списков, скажем, например, просто

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; 

и так далее. Эта гибкая и эффективная организация - это реляционный способ ведения дел ...