2012-03-07 2 views
0

Я хотел бы моделировать жанры игр таким образом, чтобы жанры могли иметь подразделы, например.
Жанр | Sub Жанр
Действие> Приключения
Action> Shooter
Моделирование> Моделирование автомобиля

Как вы можете себе представить, я не то, что Shooter быть Подсекция моделирования, а также, и т.д.

I думал делать это, но есть лучший способ:
Жанры (Жанр {PK}, поджанр {FK})
поджанр (поджанр {PK}, {Жанр FK})Как смоделировать подразделы в реляционной базе данных?

ответ

2

Я бы, вероятно, создать Жанры и поджанров таблицы, как:

Жанры (GenreID {PK}, GenreName)

поджанр (SubGenreID {PK}, GenreID {FK}, SubGenreName)

Нет причин иметь SubGenre как FK в таблице жанров. Это ограничивает вас одним жанром на поджанр.

1

Я думаю, что вам нужно:

Genres 
------ 
Genre PK 


SubGenres 
--------- 
SubGenre PK 
Genre  FK 

или это (если есть шанс на 2 Жанры имеющих поджанров с таким же названием), например:

Action> Space
Simulation> Space

Genres 
------ 
Genre PK 


SubGenres 
--------- 
Genre  PK FK 
SubGenre PK 
+0

В вашем втором примере, в случае двух жанров, имеющих поджанры с тем же именем, было бы лучше переименовать таблицу поджанров в жанры _subgenres и использовать его как таблицу соединений для вашего первого определения поджанров - создания отношения M: M. – gangreen

+0

@gangreen: На самом деле это похоже на отношения «M: M», как есть. Только с соединительной таблицей и без второй таблицы :) –

+0

Вправо, вправо. Я предполагаю, что у меня возникают проблемы с нормальной формой/обновлением аномалий, с которыми можно столкнуться. Например, если два жанра разделили поджанр «Космос», но он был опечатан «Спайк»; можно было бы исправить орфографию в одной записи, но не другую. Опять же, возможно, в некоторых случаях это было бы предпочтительнее, чтобы это произошло ... – gangreen

Смежные вопросы