2011-04-02 70 views
1

我的应用程序需要在多个表之间实现一对一的关系。我有一张储存公司的表格(可以是客户和供应商,也可以是两者都有)。有二比特字段,客户和供应商。关于数据库设计的建议 - 涉及关系的多个表

然后我有各种不同的操作表:发票,银行业务,Cashdesk操作。我需要将付款与发票配对。付款不是确切的发票金额,但它可以分成每个发票数量。此外,发票可以分成多次付款。付款可以来自银行或cashdesk操作

我原来的做法是有一个表,PaymentRelations,与外键InvoiceID,BankOpID,CashOpID和金额,并为他们之间的任何支付,我创建一个只有两个记录国外身份证填写以及相应金额。通过这种方式,我可以随时知道每项操作(发票或付款)的付款金额。

另外还有RI要求,所以如果一个文件涉及支付关系,它不能被删除(或者有级联删除,所以如果发票文件的支付被删除,相关的PaymentRelations记录被删除,所以对手操作被释放 - 它们不再涉及支付关系,因此它们的数量可以充分用于其他支付关系)。

但出现了另一种情况。由于合作伙伴既可以是客户也可以是供应商,因此可以在同一合作伙伴的客户和供应商方之间进行相同类型的操作之间进行补偿(例如,合作伙伴既是客户又是供应商,他为供应商提供了100的发票并收到了发票作为150的客户,50在收到和发送的发票之间得到补偿,其余的每个都通过一次或多次付款操作付款)。 这也可能发生在其他操作上(例如,他通过银行操作100支付,他通过另一银行操作200收到,并且需要在这两个操作之间补偿50;同样适用于木桶操作)。

你会用什么方法来模拟这种关系?

回答

3

我会购买会计软件,而不是写它。有些车轮值得重新发明;这不是其中之一。

但是,如果你必须。 。 。

位域是识别客户和供应商的错误方法。 This SO answer应该让你解决与客户和供应商有关的问题。

如果我不得不设计一个会计系统,我想我会从一个电子表格开始。我会在电子表格中设计一个交易表格,这样我就可以感觉到某些交易是如何相似的,以及其他人是如何不同的。在这个阶段,我不会担心NULL,关于重复组,关于传递依赖或其他任何类似的事情。

在电子表格中开发了一个工作(ish)模型后,我会尽量将它标准化为5NF。

+0

谢谢,但这不是一个选项。该系统正在开发中,它解决了客户无法找到他人的一些特定要求,他想要一个定制系统 – bzamfir 2011-04-15 20:05:54

+0

@bzamfir:更新了答案。 – 2011-11-05 20:08:19