2016-11-24 3 views
2

У меня есть приложение для ввода заказов на продажу с использованием Ruby On Rails. Приложение имеет три объекта. Агент по продажам, банки и страховые компании. Продавец может получить комиссионные из любого банка или страховки или оба на основе ежемесячной или недельной фиксированной суммы или на основе процента от проданной суммы.Коммерческая комиссия дизайн базы данных

Я смущен с дизайном базы данных. Я взглянул на этот пост, но я не уверен. Database Design - sales from multiple sources

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

ответ

2

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

  1. 5-таблица: Агент, банк, страхование, BankCommission, InsuranceCommission. Банковская комиссия ссылается на Банк, аналогичный Комиссии по страхованию.

  2. 4-стол дизайн: агент, банк, страхование, комиссия. Комиссия ссылается либо на банк, либо на страховку (два поля, ровно один не нуль).

Выбор, который следует использовать, во многом зависит от того, как выглядят два типа комиссионных. Если они идентичны, за исключением источника комиссии, идите с дизайном 2. Таким образом, вы сохраняете повторяющуюся работу, как при создании/изменении схемы, так и при написании запросов.

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

Если у вас есть сомнения, я бы выбрал дизайн 1. Более надежный в отношении будущих изменений и, вероятно, немного более эффективен для запросов, хотя это будет зависеть от запроса. Еще одна потенциальная проблема с дизайном из четырех таблиц заключается в том, что вам нужно будет указать внешние ключи по столбцам, где исходный столбец может содержать нулевые значения. Способ управления такими внешними ключами правильно отличается между поставщиками баз данных coughSQLServercough, поэтому вы теряете некоторую переносимость.

+0

Большое спасибо. Может быть, я пойду за дизайн 1. Да, вы правы. Дизайн 1 будет более надежным и простым в сохранении любых будущих изменений. – Arefin

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