86 lines
3.4 KiB
MySQL
86 lines
3.4 KiB
MySQL
-- Flashcard System Schema for Oracle ADB
|
|
-- Run this in SQL Developer or SQLcl
|
|
|
|
-- Users table (for future SSO)
|
|
CREATE TABLE flashcard_users (
|
|
user_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
username VARCHAR2(100) NOT NULL UNIQUE,
|
|
email VARCHAR2(255),
|
|
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP,
|
|
is_active CHAR(1) DEFAULT 'Y',
|
|
CONSTRAINT flashcard_users_pk PRIMARY KEY (user_id)
|
|
);
|
|
|
|
-- Flashcard tables
|
|
CREATE TABLE flashcard_decks (
|
|
deck_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
user_id NUMBER NOT NULL,
|
|
name VARCHAR2(200) NOT NULL,
|
|
description VARCHAR2(1000),
|
|
language_pair VARCHAR2(20) DEFAULT 'EN-KO',
|
|
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP,
|
|
is_active CHAR(1) DEFAULT 'Y',
|
|
CONSTRAINT flashcard_decks_pk PRIMARY KEY (deck_id),
|
|
CONSTRAINT flashcard_decks_fk FOREIGN KEY (user_id) REFERENCES flashcard_users(user_id)
|
|
);
|
|
|
|
CREATE TABLE flashcard_cards (
|
|
card_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
deck_id NUMBER NOT NULL,
|
|
question_en VARCHAR2(2000) NOT NULL,
|
|
answer_en VARCHAR2(2000),
|
|
question_ko VARCHAR2(2000) NOT NULL,
|
|
answer_ko VARCHAR2(2000),
|
|
example_sentence CLOB,
|
|
notes CLOB,
|
|
difficulty_level NUMBER DEFAULT 1 CHECK (difficulty_level BETWEEN 1 AND 5),
|
|
times_reviewed NUMBER DEFAULT 0,
|
|
times_correct NUMBER DEFAULT 0,
|
|
last_reviewed_at TIMESTAMP,
|
|
next_review_at TIMESTAMP,
|
|
created_at TIMESTAMP DEFAULT SYSTIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP,
|
|
is_active CHAR(1) DEFAULT 'Y',
|
|
CONSTRAINT flashcard_cards_fk FOREIGN KEY (deck_id) REFERENCES flashcard_decks(deck_id)
|
|
);
|
|
|
|
-- Study sessions tracking
|
|
CREATE TABLE flashcard_sessions (
|
|
session_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
user_id NUMBER NOT NULL,
|
|
deck_id NUMBER NOT NULL,
|
|
started_at TIMESTAMP DEFAULT SYSTIMESTAMP,
|
|
ended_at TIMESTAMP,
|
|
cards_reviewed NUMBER DEFAULT 0,
|
|
cards_correct NUMBER DEFAULT 0,
|
|
cards_incorrect NUMBER DEFAULT 0,
|
|
CONSTRAINT flashcard_sessions_fk1 FOREIGN KEY (user_id) REFERENCES flashcard_users(user_id),
|
|
CONSTRAINT flashcard_sessions_fk2 FOREIGN KEY (deck_id) REFERENCES flashcard_decks(deck_id)
|
|
);
|
|
|
|
-- Study session card results
|
|
CREATE TABLE flashcard_session_results (
|
|
result_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|
session_id NUMBER NOT NULL,
|
|
card_id NUMBER NOT NULL,
|
|
was_correct CHAR(1) NOT NULL,
|
|
response_time_ms NUMBER,
|
|
attempted_at TIMESTAMP DEFAULT SYSTIMESTAMP,
|
|
CONSTRAINT flashcard_results_fk1 FOREIGN KEY (session_id) REFERENCES flashcard_sessions(session_id),
|
|
CONSTRAINT flashcard_results_fk2 FOREIGN KEY (card_id) REFERENCES flashcard_cards(card_id)
|
|
);
|
|
|
|
-- Indexes
|
|
CREATE INDEX flashcard_cards_idx1 ON flashcard_cards(deck_id, is_active);
|
|
CREATE INDEX flashcard_cards_idx2 ON flashcard_cards(next_review_at);
|
|
CREATE INDEX flashcard_decks_idx1 ON flashcard_decks(user_id, is_active);
|
|
|
|
-- Comments for documentation
|
|
COMMENT ON TABLE flashcard_users IS 'User accounts (for future SSO integration)';
|
|
COMMENT ON TABLE flashcard_decks IS 'Flashcard decks organized by user';
|
|
COMMENT ON TABLE flashcard_cards IS 'Individual flashcards with EN/KO translations';
|
|
COMMENT ON TABLE flashcard_sessions IS 'Study session history';
|
|
COMMENT ON TABLE flashcard_session_results IS 'Individual card results during study sessions';
|