两种类型的发票编号(2个表,0..1关系)

时间:2013-02-12 13:40:14

标签: sql sql-server-2008 database-design

我有桌面发票 - PK是年份+ document_type_id +数字(这是当前编号,我无法更改)。所以,数据是这样的:

year    document_type_id   number
2013    351                1  
2013    351                2
2013    352                1

现在,我需要开发第二种编号 - 表格发票_2 - PK是年份+ market_id + cash_register_id +数字(这是法律禁止的一些发票的编号),FK是invoices_year + invoices_document_type_id + invoices_number

发票 - invoice_2必须为1 - > 0..1关系。

问题是在发票_2表中我可能有这个(我想消除 - 使用一些PK + FK组合?):

year  market_id  cash_register_id  number  invoices_year inovices_document_type invoices_number
2013     1              1            1         2013           351                    1
2013     1              1            2         2013           351                    1

正如您所看到的,发票2013-351-1使用可以在invoices_2表中添加多1次,这是必须禁止的。

请参阅http://www.sqlfiddle.com/#!3/6b42c/1

1 个答案:

答案 0 :(得分:0)

最好将第二个编号系统放在自己的表中。

Invoice
-------
year
document_type_id
number
invoice_2_fk
...


Invoice_2
---------
invoice_2 _id
year
market_id
cash_register_id
number

发票表中的发票2外键可以为空。如果它为空,则没有发票2.如果它是有效的ID,则会有发票2.这是一对零/一关系。