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
解释
BOOK 和 CATEGORY 之间是多对多关系,通过 BOOKCATEGORY 表来实现。
USER 和 READINGLIST 之间是一对多关系,一个用户可以创建多个阅读列表。
READINGLIST 和 BOOK 之间是多对多关系,通过 READINGLISTBOOK 表来实现。
USER 和 READINGLIST 之间通过 SUBSCRIPTION 表来维护订阅关系,一个用户可以订阅多个阅读列表,一个阅读列表可以被多个用户订阅。