SQL: Как спроектировать базу данных, когда один столбец имеет несколько категорий?

Я пытаюсь создать базу данных для комического сайта. Я планирую иметь:

  • Таблица № 1: Комиксы (id, title, genre_id, ...)
  • Таблица № 2: Жанры (идентификатор, имя, ...)

Однако каждый комикс может иметь несколько жанров одновременно (романтика, приключения и т. Д.).

Поэтому, если я настрою базу данных, как указано выше, мне нужно будет создать несколько строк для 1 комикса в Таблице 1, которые имеют ту же самую другую информацию:

(id, title,...) 

но просто есть другой genre_id .

Это кажется неправильным ... есть ли лучший способ сделать это?

Всего 2 ответа


Вы можете создать таблицу отношений «многие ко многим», называемую жанрами.

В этой таблице жанров хранятся все жанры, частью которых является комикс.

Комикс может быть частью нескольких жанров, а жанр может быть частью нескольких комиксов. Таким образом, вы можете нормализовать таблицу комиксов, не создавая дубликатов.

Пример таблицы Genre_mapping:

comic_id genre_id 
1           1   
1           2
2           2
3           1
3           5
3           5

Жанровая таблица:

genre_id genre_name
1           Comedy
2           Action
3           Romance
4           Adventure
5           Thriller

Вы хотите таблицу связей или соединений :

create table comic_genres (
    comic_genres id generated always as identity primary key,
    comic_id int references comics(comic_id),
    genre_id int references genres(genre_id)
);

Вы можете включить в таблицу дополнительную информацию, такую ​​как дата создания каждой строки.


Есть идеи?

10000