sql
This commit is contained in:
101
supabase/create/flash_card.sql
Normal file
101
supabase/create/flash_card.sql
Normal file
@@ -0,0 +1,101 @@
|
||||
-- ============================================
|
||||
-- FLASHCARD SYSTEM
|
||||
-- ============================================
|
||||
|
||||
CREATE TABLE flashcard_list (
|
||||
id SERIAL PRIMARY KEY,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
description TEXT,
|
||||
total_words INT DEFAULT 0,
|
||||
created_by INT REFERENCES users(id) ON DELETE SET NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE flashcard_term (
|
||||
id SERIAL PRIMARY KEY,
|
||||
list_id INT NOT NULL REFERENCES flashcard_list(id) ON DELETE CASCADE,
|
||||
word VARCHAR(255) NOT NULL,
|
||||
part_of_speech VARCHAR(50), -- "adjective", "noun", "verb"...
|
||||
phonetic VARCHAR(100), -- "/kəˈmɜːʃəl/"
|
||||
definition TEXT, -- nghĩa tiếng Việt
|
||||
example TEXT, -- câu ví dụ (EN + VI)
|
||||
image_url VARCHAR(500),
|
||||
audio_tts_text VARCHAR(255), -- text để TTS (thường = word)
|
||||
audio_lang VARCHAR(10) DEFAULT 'en-US',
|
||||
display_order INT DEFAULT 0,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE user_flashcard_list (
|
||||
user_id INT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
list_id INT NOT NULL REFERENCES flashcard_list(id) ON DELETE CASCADE,
|
||||
enrolled_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (user_id, list_id)
|
||||
);
|
||||
|
||||
CREATE TABLE user_flashcard_progress (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
term_id INT NOT NULL REFERENCES flashcard_term(id) ON DELETE CASCADE,
|
||||
list_id INT NOT NULL REFERENCES flashcard_list(id) ON DELETE CASCADE,
|
||||
|
||||
-- SRS fields
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'new',
|
||||
-- 'new' | 'learning' | 'known' | 'ignored'
|
||||
ease_factor DECIMAL(4,2) DEFAULT 1.0,
|
||||
-- 1.0=Dễ | 0.65=Trung bình | 0.1=Khó | -1=Đã biết/bỏ qua
|
||||
review_count INT DEFAULT 0,
|
||||
last_reviewed_at TIMESTAMP,
|
||||
next_review_at TIMESTAMP, -- SRS scheduling
|
||||
|
||||
UNIQUE (user_id, term_id, list_id)
|
||||
);
|
||||
|
||||
CREATE TABLE user_flashcard_session (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
list_id INT NOT NULL REFERENCES flashcard_list(id) ON DELETE CASCADE,
|
||||
started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
ended_at TIMESTAMP,
|
||||
terms_reviewed INT DEFAULT 0,
|
||||
terms_new INT DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE TABLE user_flashcard_review_log (
|
||||
id SERIAL PRIMARY KEY,
|
||||
session_id INT NOT NULL REFERENCES user_flashcard_session(id) ON DELETE CASCADE,
|
||||
term_id INT NOT NULL REFERENCES flashcard_term(id) ON DELETE CASCADE,
|
||||
user_id INT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
action_value DECIMAL(4,2) NOT NULL, -- 1 | 0.65 | 0.1 | -1
|
||||
reviewed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- ============================================
|
||||
-- INDEXES
|
||||
-- ============================================
|
||||
|
||||
CREATE INDEX idx_term_list_id ON flashcard_term(list_id);
|
||||
CREATE INDEX idx_term_display_order ON flashcard_term(list_id, display_order);
|
||||
CREATE INDEX idx_progress_user ON user_flashcard_progress(user_id);
|
||||
CREATE INDEX idx_progress_next_review ON user_flashcard_progress(user_id, next_review_at);
|
||||
CREATE INDEX idx_progress_status ON user_flashcard_progress(user_id, list_id, status);
|
||||
CREATE INDEX idx_review_log_session ON user_flashcard_review_log(session_id);
|
||||
CREATE INDEX idx_enrolled_user ON user_flashcard_list(user_id);
|
||||
|
||||
-- 1. Cài đặt chế độ review — trên trang có nút "Cài đặt chế độ review".
|
||||
-- Cần lưu preferences của user như số từ mới mỗi ngày, thứ tự hiển thị (ngẫu nhiên hay tuần tự), hiển thị mặt trước là EN hay VI. Cần thêm table:
|
||||
|
||||
CREATE TABLE user_flashcard_settings (
|
||||
user_id INT REFERENCES users(id),
|
||||
list_id INT REFERENCES flashcard_list(id),
|
||||
daily_new_limit INT DEFAULT 20,
|
||||
shuffle BOOLEAN DEFAULT TRUE,
|
||||
front_side VARCHAR(10) DEFAULT 'word', -- 'word' | 'definition'
|
||||
show_all_terms BOOLEAN DEFAULT FALSE,
|
||||
-- Khi TRUE: hiển thị tất cả từ kể cả ignored
|
||||
-- Khi FALSE: từ ignored sẽ bị bỏ qua cho đến khi hết từ cần ôn
|
||||
PRIMARY KEY (user_id, list_id)
|
||||
);
|
||||
|
||||
-- cho user tạo list riêng
|
||||
ALTER TABLE flashcard_list ADD COLUMN is_public BOOLEAN DEFAULT TRUE;
|
||||
Reference in New Issue
Block a user