Skip to content

データベーススキーマ設計

SQLite をプライマリデータストアとして使用します。Prisma ORM 経由でアクセスします。

ER図

mermaid
erDiagram
    Bookmark ||--o| Knowledge : "1:1"
    Bookmark ||--o{ MediaItem : "1:N"
    Bookmark }o--o{ Category : "N:M (BookmarkCategory)"
    Knowledge ||--o| OSSReport : "1:1"
    Knowledge }o--o| WeeklyDigest : "included in"
    User ||--o{ Bookmark : "owns"

    Bookmark {
        int id PK
        string tweetId UK
        string text
        string authorHandle
        string authorName
        datetime tweetCreatedAt
        datetime importedAt
        string source
        json rawJson
        int userId FK
    }

    Knowledge {
        int id PK
        int bookmarkId FK,UK
        string summary
        enum action
        json categories
        json tags
        string sentiment
        float confidence
        json relatedIds
        datetime analyzedAt
    }

    OSSReport {
        int id PK
        int knowledgeId FK,UK
        string repoUrl
        string repoOwner
        string repoName
        int stars
        string license
        string language
        int securityScore
        string securityVerdict
        string buildResult
        string testResult
        string screenshotPath
        string usageNotes
        datetime verifiedAt
    }

    Category {
        int id PK
        string name UK
        string slug UK
        string color
        string description
    }

    MediaItem {
        int id PK
        int bookmarkId FK
        string type
        string url
        string thumbnailUrl
    }

    Setting {
        int id PK
        string key UK
        string value
    }

    User {
        int id PK
        string name
        string email UK
        string role
        string passwordHash
        string inviteCode
    }

    WeeklyDigest {
        int id PK
        datetime weekStart
        datetime weekEnd
        string content
        json trends
    }

モデル定義

Bookmark

ブックマークの基本情報を格納するメインテーブル。

カラム制約説明
idIntPK, auto内部ID
tweetIdStringUNIQUEツイートID(重複排除キー)
textStringツイート本文
authorHandleString投稿者ハンドル (@name)
authorNameString投稿者表示名
tweetCreatedAtDateTimeツイート作成日時
importedAtDateTimedefault: nowインポート日時
sourceString取得元 (chrome_cookie, bookmarklet, json_import)
rawJsonStringnullable生のツイート JSON
userIdIntFK所有ユーザー

Knowledge

AI分析結果を格納。Bookmark と 1:1 の関係。

カラム制約説明
idIntPK, auto内部ID
bookmarkIdIntFK, UNIQUE対応するブックマーク
summaryStringAI生成の要約
actionEnumread_later, try_tool, reference, share, archive
categoriesJSONカテゴリスラッグの配列
tagsJSONタグの配列
sentimentStringpositive, neutral, negative
confidenceFloat分類の信頼度 (0.0-1.0)
relatedIdsJSON関連ブックマークIDの配列
analyzedAtDateTime分析実行日時

OSSReport

OSS検証結果を格納。Knowledge と 1:1 の関係。

カラム制約説明
idIntPK, auto内部ID
knowledgeIdIntFK, UNIQUE対応するナレッジ
repoUrlStringリポジトリURL
repoOwnerStringオーナー名
repoNameStringリポジトリ名
starsIntスター数
licenseStringnullableライセンス種別
languageStringnullable主要言語
securityScoreInt安全性スコア (0-100)
securityVerdictStringVERIFY, CAUTION, DANGER
buildResultStringビルド結果
testResultStringnullableテスト結果
screenshotPathStringnullableスクリーンショットパス
usageNotesStringnullableAI生成の使用メモ
verifiedAtDateTime検証実行日時

Category

ブックマーク分類用のカテゴリマスタ。

カラム制約説明
idIntPK, auto内部ID
nameStringUNIQUE表示名
slugStringUNIQUEURL用スラッグ
colorStringnullableテーマカラー (hex)
descriptionStringnullableClaude への分類指示として使用

MediaItem

ブックマークに添付されたメディア情報。

カラム制約説明
idIntPK, auto内部ID
bookmarkIdIntFK対応するブックマーク
typeStringphoto, video, animated_gif
urlStringメディアURL
thumbnailUrlStringnullableサムネイルURL

Setting

アプリケーション設定のキーバリューストア。

カラム制約説明
idIntPK, auto内部ID
keyStringUNIQUE設定キー
valueString設定値

User

マルチユーザー対応のユーザーテーブル。

カラム制約説明
idIntPK, auto内部ID
nameString表示名
emailStringUNIQUEメールアドレス
roleStringadmin, member, viewer
passwordHashStringbcrypt ハッシュ
inviteCodeStringnullable招待コード

WeeklyDigest

週次ダイジェストの保存。

カラム制約説明
idIntPK, auto内部ID
weekStartDateTime集計開始日
weekEndDateTime集計終了日
contentStringAI生成のダイジェスト本文
trendsJSONトレンドキーワードの配列

インデックス

sql
-- パフォーマンス最適化用インデックス
CREATE UNIQUE INDEX idx_bookmark_tweetId ON Bookmark(tweetId);
CREATE INDEX idx_bookmark_source ON Bookmark(source);
CREATE INDEX idx_bookmark_importedAt ON Bookmark(importedAt);
CREATE INDEX idx_knowledge_action ON Knowledge(action);
CREATE INDEX idx_knowledge_analyzedAt ON Knowledge(analyzedAt);
CREATE INDEX idx_ossreport_securityVerdict ON OSSReport(securityVerdict);
CREATE INDEX idx_category_slug ON Category(slug);