29 lines
1.6 KiB
SQL
29 lines
1.6 KiB
SQL
-- Бинго «Баланс 2.0» — схема SQLite (применяется сервером при каждом старте, повторно безопасно).
|
|||
|
|
-- Хранятся только анонимные данные: случайный id устройства, неделя, номер клетки, ответ опроса.
|
||
|
|
-- Никаких имён, email, IP и времени событий.
|
||
|
|
|
||
|
|
-- Текущие отметки: одна строка = одна клетка, отмеченная устройством на неделе.
|
||
|
|
-- Первичный ключ не даёт отметить одну клетку дважды за неделю с одного устройства.
|
||
|
|
CREATE TABLE IF NOT EXISTS marks (
|
||
|
|
device TEXT NOT NULL,
|
||
|
|
week TEXT NOT NULL, -- понедельник недели, 'YYYY-MM-DD'
|
||
|
|
cell INTEGER NOT NULL CHECK (cell BETWEEN 1 AND 16),
|
||
|
|
PRIMARY KEY (device, week, cell)
|
||
|
|
) WITHOUT ROWID;
|
||
|
|
|
||
|
|
-- Мини-опрос «Твоя батарейка сейчас?»: один ответ на устройство в неделю (можно поменять).
|
||
|
|
CREATE TABLE IF NOT EXISTS pulse (
|
||
|
|
device TEXT NOT NULL,
|
||
|
|
week TEXT NOT NULL,
|
||
|
|
answer TEXT NOT NULL CHECK (answer IN ('full', 'mid', 'low')),
|
||
|
|
PRIMARY KEY (device, week)
|
||
|
|
) WITHOUT ROWID;
|
||
|
|
|
||
|
|
-- Кэш общей суммы шагов: пересчитывается при каждой отметке,
|
||
|
|
-- поэтому опрос батарейки читает одну строку.
|
||
|
|
CREATE TABLE IF NOT EXISTS totals (
|
||
|
|
key TEXT PRIMARY KEY,
|
||
|
|
value INTEGER NOT NULL
|
||
|
|
);
|
||
|
|
|
||
|
|
INSERT OR IGNORE INTO totals (key, value) VALUES ('steps', 0);
|