Я пытаюсь сделать простое приложение, в котором пользователи могут составлять списки фильмов/книг, которые они хотели бы закончить. После создания списка они могут добавлять в список или изменять порядок элементов в списке.
Итак, в настоящее время у меня есть таблица пользователей:
CREATE TABLE User (
userid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
username TEXT NOT NULL UNIQUE,
password TEXT NOT NULL,
salt TEXT NOT NULL UNIQUE
);
И таблица списка:
CREATE TABLE List (
listid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
listname TEXT NOT NULL,
userid INTEGER NOT NULL,
date_created TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
date_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
FOREIGN KEY(userid) REFERENCES User(userid)
);
Сейчас я пытаюсь понять: как мне хранить фактические списки? Списки создаются пользователями, и у пользователя должна быть возможность добавлять и удалять из них, а также изменять порядок элементов списка, если они хотят. Я также хотел бы хранить некоторые метаданные с каждым элементом списка (например, URL-адрес соответствующей страницы Википедии фильма).
Сначала я подумал, что просто сохраню список в формате JSON в столбце таблицы List. Но это кажется нелогичным в SQL.
Быстрый беглый поиск привел меня к людям, говорящим о соединительных таблицах. Я еще не уверен, что полностью понимаю соединительные таблицы; но означает ли это, что каждый раз, когда пользователь будет создавать новый список, мне придется создавать новую таблицу для всех элементов списка? (Итак, поскольку я создаю новую строку в таблице List
, я также создам новую таблицу ListItems_ListID_Username
, которая ссылается на эту строку?).
Любое понимание ценится. Если это не очевидно, я полный новичок в SQL. :)
РЕДАКТИРОВАТЬ: В качестве примера, если бы я должен был хранить каждый элемент списка в таблице, я думаю, что каждый элемент списка будет выглядеть как эта псевдосхема
(orderInList INTEGER, itemname TEXT, url TEXT (nullable), listid INTEGER (foreign key to List), userid INTEGER (foreignkey to User))
pbkdf2
с уникальной солью для каждого пользователя, прежде чем они будут сохранены в базе данных. Я надеюсь, что это нормально. :) Например, элемент списка потенциально может выглядеть так: (имя элемента, URL-адрес (обнуляемый), listid (внешний ключ), идентификатор пользователя (внешний ключ)). Я обновлю свой вопрос этим примером. - person keb   schedule 11.10.2020join
эти три таблицы, т. е. user, list, list_details, чтобы получить данные для пользователя. Потому что пользователь может создать один список для фильмов и другой для книг. поэтому детали списка будут эффективно хранить их в 2 отдельных списках.JSON
идея хороша, если ваша БД маленькая. - person Koushik Roy   schedule 11.10.2020