2017-01-02 3 views
-1

Это мой первый проект базы данных моей домашней библиотеки. У меня вопрос о том, как реализовать первичные ключи в каждой таблице, мне также интересно узнать, допустимо ли иметь множество таблиц, связанных с одним из иностранных, как у меня есть со многими отношениями с «contributor_id».Дизайн базы данных: основной ключ и многие из многих ассоциаций

Link to image of design

Не все мои таблицы имеют первичный ключ. Если первичный ключ НЕ должен быть внешним ключом (как я понял это), что может служить первичным ключом в таблицах copy_info и book_info? Я не уверен, что правильно реализовал таблицы-посредники, где может существовать много-много отношений. Является ли ситуация ситуацией, когда мне потребуется составной первичный ключ ?

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

+0

[_Tips на оптимальном расстоянии друг от друга table design_] (http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table) –

+0

Вам необходимо прочитать вступительное слово колледжа/университета для проектирования базы данных. Затем следуйте за ним методом проектирования. Затем задайте один конкретный вопрос в этом контексте. Главное здесь не то, что вам нужно отказаться от contributor_id и ввести Edits (book_id, contributer_id), Illustrates (...) и т. Д. Но оправдание - это пара глав учебника. – philipxy

ответ

0

Я недопонимание, как реализовать многие-ко многие отношения. После того, как я установил соединительные столы, у моих таблиц были первичные ключи. Updated Design

0

Я просто дать несколько простых советов:

  • Я понимаю, 4 таблицы слева является промежуточной между таблицей book_info и 4 других таблицами с переводчиками информацией, информацией авторов и так далее; я прав? Так много отношений для многих (у книги может быть много авторов, а у одного автора много книг), но если вы настраиваете такие таблицы каждый раз, когда вы пытаетесь вставить тому же вкладчику в другую книгу, это вызовет повторяющаяся ошибка ключа! Итак, удалите ключи оттуда.

  • правильный путь, чтобы назначить клавишу для этих агрегированных таблиц с будет назначить ключ к обеим значениям (так что вы никогда не сломаетесь «уникальность» ограничения), НО полностью неполезный (и трата пространства и ресурсы Db) для назначения ключей в этих простых таблицах совокупности

  • books andinfo_info - это взаимно однозначные отношения? Таким образом, имеет смысл разделить это на две отдельные таблицы ТОЛЬКО для целей аккуратности (например, если у вас много полей, и вы хотите их разделить по некоторым логическим критериям)
    books и book_info - это еще одно отношение «многие ко многим» ? В этом случае поле «id» в качестве ключа является правильным решением, но неправильно сопоставлять книги таблиц и copy_info (лучше соединить copy_info с book_info, чтобы вы разделили его на два отношения «один ко многим» (легче управлять в данном случае)

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

+0

способ, которым в настоящее время настроен, я не могу подключить одного автора к нескольким книгам из-за ошибки двуличности.Если я правильно вас понимаю, если у этих 4 таблиц вообще нет ключей, мне не нужно беспокоиться об уникальности. Я не совсем понимаю ваш последний момент, так это потому, что book_info - это отношение ко многим к copy_info (я могу владеть несколькими копиями одной книги), так что ему не нужна промежуточная таблица книг? EDIT: [нравится это?] (Http://imgur.com/a/loXSg) –

+0

Лучше! Один для многих никогда не нуждается в промежуточном столе. Вы поняли. О copy_info вы планируете владеть несколькими экземплярами одной книги, но как вы будете различать их? Если у них такой же издатель, тот же pub_date и т. Д.? Они могут иметь разные условия, но в этом случае ваши таблицы слишком усложняются без уважительной причины. – Scare

+0

С тех пор я добавил первичный ключ в таблицу copy_info с именем copy_id, я также переместил издателя в таблицу copy_info. В некоторых случаях у меня может быть несколько копий одной и той же книги, но с разными датами публикации (изданиями) или на разных языках, поэтому наличие отношения «один ко многим» между book_info и copy_info имеет смысл для меня. Вы подсказываете, любезно, спасибо. –