E-R 图如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
erDiagram
BOOK {
int id PK
string title
string author
string description
int status
float rating
date addedDate
}

CATEGORY {
int id PK
string name
}

BOOKCATEGORY {
int bookId FK
int categoryId FK
}

USER {
int id PK
string username
string email
}

READINGLIST {
int id PK
int userId FK
string name
boolean isPublic
}

READINGLISTBOOK {
int readingListId FK
int bookId FK
}

SUBSCRIPTION {
int userId FK
int readingListId FK
}

BOOK ||--o{ BOOKCATEGORY: contains
CATEGORY ||--o{ BOOKCATEGORY: categorized_as
USER ||--o{ READINGLIST: creates
READINGLIST ||--o{ READINGLISTBOOK: includes
BOOK ||--o{ READINGLISTBOOK: included_in
USER ||--o{ SUBSCRIPTION: subscribes_to
READINGLIST ||--o{ SUBSCRIPTION: subscribed_by

解释

  1. BOOKCATEGORY 之间是多对多关系,通过 BOOKCATEGORY 表来实现。
  2. USERREADINGLIST 之间是一对多关系,一个用户可以创建多个阅读列表。
  3. READINGLISTBOOK 之间是多对多关系,通过 READINGLISTBOOK 表来实现。
  4. USERREADINGLIST 之间通过 SUBSCRIPTION 表来维护订阅关系,一个用户可以订阅多个阅读列表,一个阅读列表可以被多个用户订阅。

这个 Mermaid 代码可以在支持 Mermaid 的环境中渲染成 E-R 关系图。根据具体需求,可以进一步扩展和细化这些实体和关系。