2014-09-05 3 views
0

Я понимаю, что между сущностью, скажем, Клиентом и Орденом, может существовать связь, но я не понимаю, к какой таблице принадлежит 1, m или n, когда я создаю свой собственный ERD ... Есть ли какие-либо правила, чтобы понять, какую связь я должен использовать, и в каком порядке я должен поместить символы (так же это 1: n или n: 1) ?.Откуда вы знаете, какое отношение использовать?

На следующем изображении я знаю, что каждый заказ имеет 1 клиент, так как order_id является первичным ключом таблицы заказов. Это причина, почему существует связь 1: n, а не n: 1? Или это потому, что один и тот же клиент может разместить заказ несколько раз, поэтому клиент будет сохранен в таблице заказов несколько раз?

rdb

Другой пример:

Тот же вопрос здесь. Почему существует связь 1: n между t_course и t_course_taken? и почему это соотношение 1: n между t_student en t_course_taken?

relationship

+0

** 1 клиент ** может иметь ** много ордеров **. подумайте об этом так! – jbutler483

+0

1 студент может пройти много курсов, и курс может быть принят многими студентами. В этом случае таблица «средний» ребенок должна быть введена таким образом, чтобы прекратить отношения многих и многих. Поскольку его дочерняя таблица несколько будет идти на бок. – jbutler483

+0

что-то вроде: http://code.tutsplus.com/articles/sql-for-beginners-part-3-database-relationships--net-8561 будет очень полезно – jbutler483

ответ

3

Уже есть принятый ответ на этот вопрос, но я хотел обратить внимание на один аспект этого вопроса на благо будущих посетителей. Это разница между анализом предмета и проектированием базы данных.

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

Как только реальный мир (в некоторой степени) понятен, он готов начать разработку базы данных. Дизайн базы данных представляет собой процесс изобретения, но изобретение лучше ориентироваться на результатах ранее сделанного открытия.

Начальный проект базы данных включает в себя таблицы, ключи и внешние ключи. Здесь нормализация вступает в игру, и я рекомендую вторую рекомендацию jbutler изучить ее. Отметим также, что анализ выявил два объекта с отношением «многие-ко-многим» между ними, в то время как проект приводит к трем таблицам с несколькими отношениями «один-ко-многим» между внешними двумя (сущностными) таблицами и средой (отношения) Таблица. Это то, как отношения «многие ко многим» моделируются в реляционной модели.

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

+0

Спасибо большое! Я много думал об этой проблеме ... Ваш ответ действительно заставлял меня думать об этом с другой точки зрения. Как вы уже сказали, поскольку мы моделируем сценарий реальной жизни, я думаю, что я должен определить отношения, основанные на том, что такое сущность, а не пытаться выяснить, какие отношения будут основаны на атрибутах и ​​ключах каждой организации. Можете ли вы подтвердить, что это правильный способ выяснить отношения? Так, например, потому, что в компании много сотрудников, и каждый сотрудник работает в одной компании с соотношением 1: n. – user1534664

+0

Или вы действительно смотрите на то, что атрибуты и ключи, и попытаться выяснить, что отношения основаны на этой информации? – user1534664

+0

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

1

Moving это к ответу:

Последний комментарий Ответ: В общем, да.

Однако в первом примере это не имеет смысла. У одного клиента может быть много заказов, но один заказ не может принадлежать многим клиентам.

В вашем втором примере

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

Студент может иметь много курсов для студентов, но теперь курс для студентов будет специфичным для них.

Курс может иметь много studentCourses, но опять же, single studentCourse будет принадлежать одному курсу.


Теперь какой-либо смысл?


BTW, я думаю, вы могли бы использовать для чтения на базы данных Нормализация (http://holowczak.com/database-normalization/), который, мы надеемся объяснить лучше, как ломаются таблицы (ваш учебник может даже содержать раздел или два на subject!)

+0

Мне нравится этот ответ. Первоначально это был принятый ответ, и это достаточно хорошо. –

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