Таблица списка желаний
Добро пожаловать в итоговый проект! Pixel Shop хочет добавить новую функцию: список желаний. Покупатель, которому понравилась игра, но который не хочет покупать её прямо сейчас, сохраняет её в списке желаний, а магазин может сообщить ему позже — когда игра выйдет или подешевеет. В этом уроке вы сами создадите базу данных для этой функции: спроектируете и создадите таблицу, заполните её, а затем ответите на вопросы магазина о ней и о его продажах. Вам пригодится понемногу всё, что было в курсе.
Весь проект — это один файл, который растёт. Каждое упражнение начинается с решения предыдущего, и вы дописываете его. Помните, что каждый запуск начинается со свежей копии базы данных магазина: созданной вами таблицы при следующем запуске не будет, если ваш файл не создаст её снова. Поэтому CREATE TABLE (а позже и INSERT) остаётся в начале файла и выполняется при каждом нажатии на «Запустить».
Любая хорошая таблица начинается с вопроса: что говорит одна строка? Здесь это «этот покупатель хочет эту игру с этого дня». Значит, в таблице нужны три столбца: ID покупателя, ID игры и дата добавления игры. Покупатель может хотеть много игр, и многие покупатели могут хотеть одну и ту же игру. Это связь «многие ко многим», как у order_items между заказами и играми или у reviews между играми и покупателями.
Такой таблице собственный id не нужен. Её первичный ключ — пара из двух ID, составной первичный ключ. Он не только определяет каждую строку, но и следит, чтобы одна и та же игра не попала в список желаний одного покупателя дважды.
Остальное — как в таблицах самого магазина: ID имеют тип INTEGER, дата — это TEXT вида 'YYYY-MM-DD', у каждого столбца должно быть значение (NOT NULL), ID указывают на существующие строки (REFERENCES), а таблица — STRICT, чтобы SQLite проверял типы. Для напоминания вот таблица, построенная так же: теги игр, где у игры может быть много тегов, а у тега — много игр:
CREATE TABLE game_tags (
game_id INTEGER NOT NULL REFERENCES games (id),
tag TEXT NOT NULL,
PRIMARY KEY (game_id, tag)
) STRICT;Составной первичный ключ пишется после последнего столбца, на отдельной строке, а его столбцы — в скобках. Типичная ошибка: написать PRIMARY KEY после каждого из двух столбцов. Получится два первичных ключа, и SQLite остановится с ошибкой table "wishlist" has more than one primary key.
Когда таблица создана, SELECT * FROM wishlist; покажет её. Строк в ней пока нет, поэтому результат — только строка с названиями столбцов. Это быстрый способ проверить, что вы правильно записали столбцы.
Задание
- 1
Под комментарием
-- 1. Таблица списка желанийсоздайте таблицуwishlistс тремя столбцами в таком порядке:customer_idиgame_idтипаINTEGERиaddedтипаTEXT. Под ней добавьте запросSELECT * FROM wishlist;и нажмите «Запустить». В результате нет строк, только столбцы:customer_id game_id added - 2
У каждого столбца всегда должно быть значение, а SQLite должен проверять типы: добавьте всем трём столбцам
NOT NULLи сделайте таблицуSTRICT. - 3
И ключи: первичный ключ — пара
customer_idиgame_id;customer_idссылается наcustomers (id), аgame_id— наgames (id).