我有以下模型(简化后省略了所有其他字段,重点关注主键ID):
[invoice]
invoice_id
customer_id
invoice_description
[customer]
customer_id
company_id
customer_name
[company]
company_id
company_name
[strategy]
strategy_id
strategy_descripton一家公司包含许多客户,而这些客户又可以拥有属于该客户的许多发票。
虽然上面没有显示,但我也希望有一个属于一家公司(并且只有一家公司)的战略列表。
我希望客户,发票和公司,能够定义一个‘默认战略’,引用他们所属的公司的战略。
我知道我可以在每个表(发票、客户和公司)中添加一个名为strategy_id的额外FK字段,但是我如何确保如果进行了更改(有人试图将战略转移到不同的公司),我们最终不会得到发票,或者客户指向属于另一家公司的战略列表中的战略?
我该如何处理这个问题--我是否需要在业务逻辑中检查所有这些,或者使用check约束,或者这可以通过表重新设计和外键来实现?
在此之前,非常感谢,
克里斯
发布于 2012-02-02 05:30:24
如果一家公司的客户或发票改变了他们的战略,你介意吗?
例如:如果company1有strategy1。它有customer1,customer2 (有invoice1)。如果company1把它的发票改成了strategy2,那么customer1,customer2和invoice1是属于strategy2还是strategy1都可以。
如果这无关紧要,那么:
否则,如果这很重要的话:
如果你想要一个更具体的答案,你必须澄清。
发布于 2012-02-04 05:07:05
如果我理解正确的话,您希望每个公司都有多个战略,每个战略都属于一个公司(即公司和战略之间的1:n关系)。而且每个公司都有一个默认策略,这也是所有客户及其发票的默认策略。
您可以将这些约束定义为外键约束,方法是再添加一个与[strategy]表具有1:1关系的表[company_default_strategy] (某些策略是默认的):
[invoice]
invoice_id PK
customer_id FK to customer(customer_id)
invoice_description
[customer]
customer_id PK
company_id FK to company(company_id)
customer_name
[company]
company_id PK
company_name
[strategy]
strategy_id PK
company_id FK to company(company_id)
strategy_descripton
[company_default_strategy]
company_id PK, FK1
strategy_id FK1
FK1 (strategy_id, company_id) to strategy(strategy_id, company_id)https://stackoverflow.com/questions/9103542
复制相似问题