Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Проектирование связи


Автор: Keeper89 1.5.2009, 15:57
Доброго времени суток!

Проектирую БД книжного магазина. У каждой книги часто бывает несколько авторов. Как лучше организовать в базе такое хранение информации автор-книга?

Заранее, спасибо.

Автор: Gluttton 1.5.2009, 17:10
Один и тот же автор может быть автором различных книг, а в свою очередь, каждая из книг может быть написана разными авторами - классический М:М. Для физической реализации необходимо ввести дополнительную таблицу и создать к ней связи 1:М от обоих таблиц, что то вроде такого:

user posted image

http://psbatishev.narod.ru/glos/02586.htm

Автор: Keeper89 1.5.2009, 19:07
Цитата(Gluttton @  1.5.2009,  17:10 Найти цитируемый пост)
классический М:М. Для физической реализации необходимо ввести дополнительную таблицу и создать к ней связи 1:М от обоих таблиц, что то вроде такого:

Связь, М:М, это понятно. Что сделать лучше: завести таблицу для каждого автора с идентификаторами книг или две отдельные таблицы книг и авторов и третью для связей?

Автор: Gluttton 1.5.2009, 19:26
Цитата

завести таблицу для каждого автора с идентификаторами книг


В результате денормализации возникает избыточность, но и упрощается работа с БД (запросы составлять легче и выполняються они быстрее).

Цитата

или две отдельные таблицы книг и авторов и третью для связей


Если очевидно, что "Авторы" и "Книги" отдельные сущности со своими набороми атрибутов, то не вижу способа смысла! smile (очепятался) отказываться от реализации двумя+одна таблицами.

А вообще, сложно сказать (во всяком случае мне smile ) не зная контекста задачи (предпологаемое количество записей, информацию, которую нужно хранить в БД).

Если БД должна хранить об авторах только Ф.И.О., то я бы не стал создавать отдельную таблицу для них, т.к. фактичиески эта информация является атрибутом сущности "Книга". Но! В этом случае мне прийдется вводить новую книгу в БД, ровно столько раз, сколько у нее авторов (хотя можно и всех авторов одной строкой заносить - всё зависит от требований к создаваемой БД).

А если БД должна хранить дату рождения автора, место жительство и биографию smile , то я бы создал отдельную таблицу, т.к. если этого не сделать, то при вводе новой книги в БД, нужно будет потрудиться и ввести все остальные данные (дату рождения и биографию автора).

Автор: Keeper89 1.5.2009, 23:22
Gluttton, спасибо.

Автор: Zloxa 2.5.2009, 00:26
Цитата(Gluttton @  1.5.2009,  19:26 Найти цитируемый пост)

В результате денормализации возникает избыточность, но и упрощается работа с БД (запросы составлять легче и выполняються они быстрее).

В одном месте упрощается, в другом усложняется. smile
С одной стороны легче извлекать данные, с другой стороны, тяжелее модифицировать и поддерживать ссылочную целостность. ;)

Цитата(Gluttton @  1.5.2009,  19:26 Найти цитируемый пост)
Но! 

Есть еще Но. Придется ФИО одного и того же автора вводить многожды. Когдато это будет "Пушкин А.С.", когда то "Пушкин АС", "Пушкин Алексадр Сергеевич", когдато "АС Плюшкин". Это усложнит отбор по автору.

ИМХО ответ очевиден, связь many to many - классика и реализуется через промежуточную таблицу.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)