Хранение и извлечение нескольких значений из чужой таблицы - PullRequest
2 голосов
/ 23 апреля 2011

У меня есть одна таблица «Книги» с колонкой «жанры», где я хочу сослаться на другую таблицу, содержащую список жанров.
Проблема в том, что в колонке нужно хранить более одного жанра. Например,

ID  | Author          | Title       | Genres
 2  | David Baldacci  |Stone Cold   | 1,4        (action thriller )

таблица «Книги по жанрам» с 2 колонками Id и Genre.

1 Действие
2 драма
3 комедия
4 Триллер
5 ужас

Можно ли что-то подобное сделать? или это не практично и я должен хранить жанры в виде простой строки?

Ответы [ 3 ]

2 голосов
/ 23 апреля 2011

Лучший способ решить эту проблему - использовать таблицу ссылок.

Таблица ссылок будет выглядеть так:

 ID (optional) | BookID| GenreID
 1               2       1
 2               2       4

Тогда каждая книга может иметь несколько строк (или один) в этой таблице.

(Необязательный идентификатор будет полезен, если вы заботитесь об аудите ваших таблиц на уровне строк или об аудите транзакций - вы можете использовать его для уникальной идентификации этой строки - дляпроблема не нужна).

1 голос
/ 23 апреля 2011

Вам нужна третья таблица, возможно, называемая BookGenre, которая выступает в качестве «распознавателя» для отношения многие-многие.BookGenre будет иметь две колонки, BookID и GenreID.В BookGenre будет добавлена ​​строка для каждой книги для каждого жанра.

В BookGenre будет две строки для предоставленных вами данных примера:

BookID  GenreID
2       1
2       4
1 голос
/ 23 апреля 2011

Это может быть сделано, но не должно.

Это плохо дизайн базы данных - ваша база данных должна быть нормализована .

Я предлагаю таблицу «многие ко многим» - со столбцами genreId и bookId (каждый из которых является внешним ключом и вместе образует составной первичный ключ). Это будет работать в качестве необходимой ссылки (книга может иметь много жанров, каждый жанр может писать много книг).


В качестве примера для вашей книги с таблицей Book Genres это будет выглядеть так:

bookId    genreId
2         1
2         4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...