create table book (
id_book integer primary key,
name_book text,
author_book
);
create table person (
id_person integer primary key,
name_person text
);
create table book_person (
id_person integer,
id_book integer,
role_person text,
primary key (id_person, id_book)
);
I think using role in book_person table is a good choice if one person has ONLY one role because:
- There are just a few roles which you use.
- To wouldn't to litter your DB when you could do it if created some more tables like book_author, book_translator.
- You don't need to use as you said many joinings.
- Roles in your case just an attribute and if you don't keep some extra info about roles capabilities you shouldn't create one more table for keeping binding role-person. You already keep it in book_person.
You need to create another table for role if you have:
- One person has more than one role.
- You keep some extra info about role as I said above.
I guess that's all.