som*_*ser 6 sqlite database-design
我正在做一个需要图书数据库的项目。问题如下:
一本书可以与多个人(作者、编辑、翻译者等)相关。那么一个人可能会以不同的角色为不同的书籍做出贡献。
Book1 PersonA (author), PersonB(editor)
Book2 PersonC (author), PersonB(translator), PersonD(editor)
Book3 PersonE (author), PersonA(editor)
Run Code Online (Sandbox Code Playgroud)
我有一张BOOKS
桌子(bookID, bookTitle)
,一张PEOPLE
桌子(personID, personName)
和一张ROLES
桌子(roleID, roleName)
。然后我需要一种方法来关联这些表,然后查询它们。我想到了一个具有以下行结构的连接表:
bookId personID roleID
Run Code Online (Sandbox Code Playgroud)
这是处理这个问题的最佳方式吗(在所有这些表上插入、更新和删除条目时)?如果没有,有哪些替代方案?
注意:我使用的是 SQLite3。
PS:我希望我对术语的使用是正确的。
我会使用派对模型,这样您就可以将一本书与个人或组织联系起来,而不仅仅是个人。例如,您可能希望兰登书屋担任出版商的角色。或者 M\xc3\xb6tley Cr\xc3\xbce 作为这本书的作者,而不仅仅是 Tommy Lee。
否则,看起来不错。您可能需要考虑将书籍与 PartyRole 关联,而不是单独关联 Party 和 Role,因为您可能拥有与特定角色中的 Party 相关的额外信息。也许是作者的笔名。
Postgres-y SQL,但与 SQLite 足够接近:
\n\ncreate table parties (\n party_id int primary key,\n party_type smallint not null references party_types(party_type_id), --1=individual,2=org\n name text not null\n);\n\ncreate table party_roles (\n party_role_id int primary key,\n party_id int not null references parties(party_id),\n role_id smallint not null references roles(role_id),\n ...\n extra information about a party pertaining to a role\n ...\n);\n\ncreate table book_roles (\n book_id int references books(book_id),\n party_role_id int references party_roles(party_role_id),\n\n primary key (book_id, party_role_id)\n);\n
Run Code Online (Sandbox Code Playgroud)\n