2013-06-15 4 views
0

Этот вопрос является вопросом домашней работы, поскольку он связан с вопросом, который у меня есть для моего курса вводных баз данных, но не является вопросом. Я изучаю «Руководство по MySql» Филлипа Пратта и встал на проблему во второй главе. Проблемы гласит:Оптимизация дизайна баз данных

Укажите изменения (используя сокращенное представление), что вам нужно будет сделать текущую соизволили базы данных Premiere Products поддерживать следующие требования. Клиент не обязательно , представленный единым торговым представителем, но может быть представлен несколькими торговыми представителями . Когда клиент делает заказ, продавец, который получает , комиссия в заказе должна быть в коллекции продавцов , которые представляют клиента.

база данных в настоящее время разработаны, как показано ниже (обратите внимание, что выделенные поля являются первичные ключи):

Rep (Rep_Num, Last_Name, First_Name, улица, город, штат, почтовый, Комиссия , Rate)

Клиент (customer_num, CUSTOMER_NAME, улица, город, штат, почтовый, баланс, Credit_Limit, Rep_Num)

Заказы (огйег_пит, order_date, customer_num)

Часть (Part_Num, описание, On_Hand, класс, склад, цена)

Order_Line (огйег_пит, Part_Num, Num_Ordered, Quoted_Price)

Мое решение проблемы заключалось в том, чтобы добавить отдельную таблицу для представления следующим образом:

Rep (Rep_Num, Last_Name, First_Name, улица, город, штат, почтовый, Комиссия Rate)

Клиент (customer_num, CUSTOMER_NAME, улица, город, штат, почтовый, баланс, Credit_Limit)

представляет собой (Represents_Id, customer_num, Rep_Num)

Заказы (огйег_пит, ORDER_DATE, Represents_Id)

Часть (Part_Num, описание, On_Hand, класс, склад, цена)

Order_Line (огйег_пит, Part_Num, Num_Ordered, Quoted_Price)

Я интересно, если это самый эффективный способ решения предлагаемой проблемы, и если у моего решения есть очевидные недостатки?

+1

Это не «Оптимизация»; он спрашивает, как моделировать новое требование с учетом текущей схемы. – user2246674

+0

Я согласен, что сам вопрос спрашивает, как моделировать, но это не мой вопрос. Я реализовал модель, которая работает, я просто задаюсь вопросом, насколько оптимальной является моя модель. –

+2

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

ответ

1

Суть вопроса, как представляется, ввести несколько столбцов первичных ключей, а также тот факт, что внешний ключ нужен уникальный ключ для ссылки (в данном случае Orders (Rep_Num, Customer_num) references Represents (Rep_Num, Customer_num)):

Представляет собой (Rep_Num , customer_num)

Заказы (огйег_пит, ORDER_DATE, Rep_Num, customer_num)

Вы можете, по общему признанию, поддерживать Represents_Id и ссылаться на это в Orders.

Недостаток вашего решения заключается в том, что Orders (Represents_Num) не обязательно ссылается на действительного представителя для этого конкретного клиента.


На совершенно не по теме записки, ваше решение фактически является правильным на практике: продажи, кто берет телефон получает часть или все комиссии, независимо от того, является ли клиент, возложенные на него или не.

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

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