图_7数据库ER关系
原生 Excalidraw 可编辑画布,基于 SuperMew-0.1.0。请使用 Obsidian 的 Excalidraw 视图打开。
视图归属: M8 PostgreSQL ER 专题。
实体与属性
- 四个矩形分别表示四张真实 PG 表;28 个椭圆逐一对应全部属性。
- 主键属性加下划线,外键属性标记 FK;不展示类型/长度字段表。
联系与基数
- 用户 1:N 会话;会话 1:N 消息。
- 双线表示每个会话必须属于用户、每条消息必须属于会话。
- 普通单线一侧允许没有子记录。
独立实体
- ParentChunk 属于共享知识库,没有 User/Session 外键。
- parent/root 是业务引用,不能虚构成 PG 自关联 FK。
源码对应
backend/db/models.py:User()backend/db/models.py:ChatSession()backend/db/models.py:ChatMessage()backend/db/models.py:ParentChunk()
上级主图
[[图_6数据存储与状态]]
Excalidraw Data
Text Elements
用户 users ^7353578a
会话 chat_sessions ^494c4790
消息 chat_messages ^a0a9f328
父级文本块 parent_chunks ^a36acaeb
id ^52557efd
username ^629d32be
password_hash ^7e773a18
role ^a1776b95
created_at ^4b3af5dd
id ^89c492ff
user_id [FK] ^91a5ec10
session_id ^e15ceaa3
metadata_json ^5f1b73a6
updated_at ^cebdafb0
created_at ^25e37915
id ^b316556a
session_ref_id [FK] ^91ed041b
message_type ^9d37f3ca
content ^9f68387b
timestamp ^7b3880e6
rag_trace ^f632f48e
chunk_id ^d823316e
text ^f00d3f48
filename ^b468faf1
file_type ^5aeb058c
file_path ^5a647d22
page_number ^c0777526
parent_chunk_id ^b2b4a7f4
root_chunk_id ^dfcb330e
chunk_level ^8c0631b8
chunk_idx ^b54570b1
updated_at ^cc641353
拥有 ^423f0609
包含 ^d1a4beca
1 ^14441726
N ^e1fffab9
1 ^113ca747
N ^a2b2de76
父块是共享知识库实体,与用户/会话没有外键联系。 ^2a0b6537
实际外键:chat_sessions.user_id → users.id;chat_messages.session_ref_id → chat_sessions.id。 ^5a7bc567
parent_chunk_id / root_chunk_id 是父块的业务引用,不是 PG 自关联外键;不把它们画成强制关系。 ^91cfb41a
补充约束:username 唯一;(user_id, session_id) 联合唯一;rag_trace 可空;两个外键均 ON DELETE CASCADE。 ^e914fae2
读图说明 · M8 数据与基础设施 ^5f92ff7c
实体与属性 ^7eda30d3
• 四个矩形分别表示四张真实 PG 表;28 个椭圆 逐一对应全部属性。 ^3be77daf
• 主键属性加下划线,外键属性标记 FK;不展示 类型/长度字段表。 ^7e4c30c9
联系与基数 ^ddedf452
• 用户 1:N 会话;会话 1:N 消息。 ^f1c37f5f
• 双线表示每个会话必须属于用户、每条消息必须 属于会话。 ^e9f1f542
• 普通单线一侧允许没有子记录。 ^00009be5
独立实体 ^52b2cd52
• ParentChunk 属于共享知识库,没有 User/Session 外键。 ^2bc1f30b
• parent/root 是业务引用,不能虚构成 PG 自关 联 FK。 ^d3b9ca69
%%
Drawing
1 | N4KAkARALgngDgUwgLgAQQQDwMYEMA2AlgCYBOuA7hADTgQBuCpAzoQPYB2KqATLZMzYBXUtiRoIACyhQ4zZAHoFAc0JRJQgEYA6bGwC2CgF7N6hbEcK4OCtptbErHALRY8RMpWdx8Q1TdIEfARcZgRmBShcZQUebR4ATm0ARho6IIR9BA4oZm4AbXAwUDBSiBJuCE0AFgSAZgSEgA5NNNLIWERKwOwojmVgtrLMbh4AVjqABn4ymG5kgHZposgK |
%%