Я не очень хорошо разбирается в базах данных, но если у меня есть эта установка:базы данных отношений и «структура»
Payment -> Advances -> Advance Payments
Таким образом, payment
может иметь advance
в результате нехватки в общем объеме за счет. Для клиента, когда вы хотите сделать advance payment
, вы должны «замаскировать» advance payment
как payment
- для собственных целей учета. Как я могу это сделать.
Прямо сейчас, advances
есть внешний ключ payments
и advance payments
имеют внешние ключи к advances
.
Простой сценарий:
У нас есть порядок, который составляет $ 100. Клиент платит 80 и 20 долларов США. Таким образом, мы создали advance
(предварительный 1), который прилагается (fk'd) к этому payment
(платеж 1). Клиент заказывает еще раз, и общая сумма составляет 50 долларов США на этот раз и платит только 40 долларов, поэтому другой advance
(аванс 2) создан привязан к этому новому payment
(платеж 2).
Когда клиент решает, что они хотят, чтобы погасить advances
в payment
создаются (оплата 3) и advances
(авансы 1 и авансовые 2) добавляют к этому payment
(оплате 3). Это делается так, что, когда он отображается в системе, у сотрудника есть возможность выбрать, для чего нужно внести advance
. Это не так просто, как получить общее количество, а затем вычесть сумму payment
.
Так что, когда они входят в количестве, которое advance payment
создаются и прикрепляются к этому advance
, потому что advance payments
являются fk'd к advances
.
Теперь вопрос, если я хочу посмотреть, какие авансовые платежи были созданы путем оплаты, как я могу это сделать?
Я не хочу нарушать мою структуру payment - advance - advance payment
- или я? Я думал только о том, что у меня paymentids
в таблице advance payment
, но это создаст связь между payments
и advance payments
, которая пренебрегает advance
, который является средним человеком. Возможно, я думаю об этом неправильно, но я не уверен.
Некоторые подробнее:
Payment Table
-------------
id : pk
amount
Advance Table
-------------
id
amount
paymentId // payment that created the advance
Advance Payment Table
---------------------
id
amount
advanceId
Что им предлагают, в котором я думаю, что это неправильно является:
Payment Table
-------------
id : pk
amount
Advance Table
-------------
id
amount
paymentId // payment that created the advance
Advance Payment Table
---------------------
id
amount
advanceId
paymentId <---- add paymentid
Я думаю, что это нарушило бы структуру/поток и оплаты больше не будет иметь аванс, который имеет авансовые платежи.
Немного больше информации - мы используем linq и SQL Server 2008. Я не знаю, имеет ли это значение.
Возможно, это очень запутанно, но я попытался объяснить это наилучшим образом.
Это похоже на чрезмерно сложную структуру. Я думаю, вы могли бы сделать с 'Order' и 'Payment' only, как записи журнала. Сначала заказ имеет отрицательный платеж, сумму заказа. Продвижение - это разница между первым отрицательным платежом и последующими платежами. –
Единственная проблема заключается в том, что мы должны следить за достижениями, потому что у клиента может быть много успехов ... и потенциально может заплатить за один шаг, а не за другого, и нам нужно будет знать, какой аванс он платит. Я думаю, что это был бы кошмар для отслеживания без отдельной таблицы – user2238556