Нужна помощь в разработке базы данных SQL - PullRequest
2 голосов
/ 17 июля 2009

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

Ответы [ 3 ]

5 голосов
/ 17 июля 2009

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

0 голосов
/ 17 июля 2009

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

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 с информацией о пользователе (имя и т. Д. И т. Д.).

Таким образом, чтобы получить все строки списка по его идентификатору, вы просто

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

или вы можете СОЮЗИТЬ это, например, с название:

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

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

0 голосов
/ 17 июля 2009

Ваш стол может быть: UserID, int ListID, int (первичный ключ-уникальный идентификатор) Название, 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, Comment FROM the_Table где UserID = @ UserID

...