2010-07-05 4 views
0

Вот как это: У меня есть таблица под названием «books», а таблица называется «категориями». Каждая «Книга» относится к категории, поэтому в книге есть поле под названием «id категории». Но нужно ли создавать «categoryList» для хранения «id книги»? Я могу использовать оператор select, чтобы найти книги, принадлежащие к категориям, но лучше ли это хранить идентификатор книги из списка категорий? Спасибо.Нужно ли указывать отношения?

ответ

3

Фактически, было бы лучше использовать таблицу сопоставления, чтобы указать отношение категории/книги.

эту таблицу можно было бы назвать category_book и один столбец category_id & один столбец для book_id

+0

Согласен. Таким образом, у вас может быть книга, принадлежащая ко многим категориям. – BenW

+0

Но отношение многих к многим в этом случае - плохая идея. Как может одна книга сидеть на двух разных полках в библиотеке? Это, по сути, то, что вы делаете со многими отношениями. –

+0

На самом деле, многие из многих отношений имеют еще одно преимущество в дизайне. он четко отделяет «то, что мои сущности» от «как я их использую». Книга - это книга, категория - категория, категория отношений/книга не имеет ничего общего с книгой – dweeves

0

В вашей previous question вы говорите, книга принадлежит только одной категории. Таким образом, вам не нужна таблица CategoryList. Это дополнительное обслуживание без дополнительной выгоды. Поддержка запросов по категориям - вот почему Природа дала нам индексы.

+1

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

+0

Если библиотека приобретает более одной копии книги, тогда база данных «должна» иметь несколько записей этой книги (одна запись для каждой физической книги) и соответствующим образом присваивать идентификатор категории. –

3

Если ОДНА книга может принадлежать к МНОГИМ категориям, а ОДНА категория может иметь МНОГИЕ книги, тогда вам нужно МНОГИЕ, чтобы СВЯЗАТЬСЯ, используя промежуточную таблицу (что-то вроде Books _JOIN_Categories).

Books 
ID | BookName 

Categories 
ID | CategoryName 

Books_Join_Categories 
BookID | CategoryID 

Если каждая книга имеет только одну категорию, но каждая категория может иметь много книг, то текущая структура отношения (CategoryID в таблице книги) должны делать только штрафом.

Books 
ID | CategoryID | BookName 

Categories 
ID | CategoryName 

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

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