データベーススキーマ設計
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
ブックマークの基本情報を格納するメインテーブル。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
id | Int | PK, auto | 内部ID |
tweetId | String | UNIQUE | ツイートID(重複排除キー) |
text | String | ツイート本文 | |
authorHandle | String | 投稿者ハンドル (@name) | |
authorName | String | 投稿者表示名 | |
tweetCreatedAt | DateTime | ツイート作成日時 | |
importedAt | DateTime | default: now | インポート日時 |
source | String | 取得元 (chrome_cookie, bookmarklet, json_import) | |
rawJson | String | nullable | 生のツイート JSON |
userId | Int | FK | 所有ユーザー |
Knowledge
AI分析結果を格納。Bookmark と 1:1 の関係。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
id | Int | PK, auto | 内部ID |
bookmarkId | Int | FK, UNIQUE | 対応するブックマーク |
summary | String | AI生成の要約 | |
action | Enum | read_later, try_tool, reference, share, archive | |
categories | JSON | カテゴリスラッグの配列 | |
tags | JSON | タグの配列 | |
sentiment | String | positive, neutral, negative | |
confidence | Float | 分類の信頼度 (0.0-1.0) | |
relatedIds | JSON | 関連ブックマークIDの配列 | |
analyzedAt | DateTime | 分析実行日時 |
OSSReport
OSS検証結果を格納。Knowledge と 1:1 の関係。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
id | Int | PK, auto | 内部ID |
knowledgeId | Int | FK, UNIQUE | 対応するナレッジ |
repoUrl | String | リポジトリURL | |
repoOwner | String | オーナー名 | |
repoName | String | リポジトリ名 | |
stars | Int | スター数 | |
license | String | nullable | ライセンス種別 |
language | String | nullable | 主要言語 |
securityScore | Int | 安全性スコア (0-100) | |
securityVerdict | String | VERIFY, CAUTION, DANGER | |
buildResult | String | ビルド結果 | |
testResult | String | nullable | テスト結果 |
screenshotPath | String | nullable | スクリーンショットパス |
usageNotes | String | nullable | AI生成の使用メモ |
verifiedAt | DateTime | 検証実行日時 |
Category
ブックマーク分類用のカテゴリマスタ。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
id | Int | PK, auto | 内部ID |
name | String | UNIQUE | 表示名 |
slug | String | UNIQUE | URL用スラッグ |
color | String | nullable | テーマカラー (hex) |
description | String | nullable | Claude への分類指示として使用 |
MediaItem
ブックマークに添付されたメディア情報。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
id | Int | PK, auto | 内部ID |
bookmarkId | Int | FK | 対応するブックマーク |
type | String | photo, video, animated_gif | |
url | String | メディアURL | |
thumbnailUrl | String | nullable | サムネイルURL |
Setting
アプリケーション設定のキーバリューストア。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
id | Int | PK, auto | 内部ID |
key | String | UNIQUE | 設定キー |
value | String | 設定値 |
User
マルチユーザー対応のユーザーテーブル。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
id | Int | PK, auto | 内部ID |
name | String | 表示名 | |
email | String | UNIQUE | メールアドレス |
role | String | admin, member, viewer | |
passwordHash | String | bcrypt ハッシュ | |
inviteCode | String | nullable | 招待コード |
WeeklyDigest
週次ダイジェストの保存。
| カラム | 型 | 制約 | 説明 |
|---|---|---|---|
id | Int | PK, auto | 内部ID |
weekStart | DateTime | 集計開始日 | |
weekEnd | DateTime | 集計終了日 | |
content | String | AI生成のダイジェスト本文 | |
trends | JSON | トレンドキーワードの配列 |
インデックス
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);