Скажем, у меня есть система, которая каталогизирует книги, и я хочу сгруппировать их по жанрам, и есть кортеж UNF:
BookId (PK): number
BookTitle: string
Blurb: string
Genres: string[]
(... everything else)
Когда нормализуется, нужно сделать Atom c жанра, а также должно быть помещено в его собственное отношение, чтобы не вызывать дублирования. Мой первый инстинкт - это сделать следующее:
BOOK
BookId (PK): number
BookTitle: string
Blurb: string
GENRE
GenreId (PK): number
GenreName: string
BOOKGENRE
BookId (CK): number
GenreId (CK): number
Но мне пришла в голову другая идея, но что-то было в ней ... неправильно (?) И, как будто это была плохая практика. Но моя идея состояла в том, чтобы избавиться от таблицы GENRE, просто сделав поле GenreName первичным ключом и используя только BOOKGENRE. Поскольку GenreName по-прежнему индексируется как часть составного ключа, он по-прежнему индексируется и эффективен для выполнения операций, таких как получение всех книг с жанром «X».
BOOK
BookId (PK): number
BookTitle: string
Blurb: string
BOOKGENRE
BookId (CK): number
GenreName (CK): string
Является ли это приемлемой практикой или Требуется ли хранить жанр как отдельную таблицу с ключом?