首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL模型/模式设计、检查约束、FK或表重新设计?

SQL模型/模式设计、检查约束、FK或表重新设计?
EN

Stack Overflow用户
提问于 2012-02-02 05:21:36
回答 2查看 210关注 0票数 1

我有以下模型(简化后省略了所有其他字段,重点关注主键ID):

代码语言:javascript
复制
[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约束,或者这可以通过表重新设计和外键来实现?

在此之前,非常感谢,

克里斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-02 05:30:24

如果一家公司的客户或发票改变了他们的战略,你介意吗?

例如:如果company1有strategy1。它有customer1,customer2 (有invoice1)。如果company1把它的发票改成了strategy2,那么customer1,customer2和invoice1是属于strategy2还是strategy1都可以。

如果这无关紧要,那么:

  • 将约束添加到公司表中。要检查客户/发票的策略,请找到母公司并检查其策略。

否则,如果这很重要的话:

  1. 将约束添加到公司表中,如果存在属于公司的下级客户/发票,则不允许更改约束(检查它们是否存在)。
  2. 会像上面提到的那样为每个表设置一个约束。

如果你想要一个更具体的答案,你必须澄清。

票数 0
EN

Stack Overflow用户

发布于 2012-02-04 05:07:05

如果我理解正确的话,您希望每个公司都有多个战略,每个战略都属于一个公司(即公司和战略之间的1:n关系)。而且每个公司都有一个默认策略,这也是所有客户及其发票的默认策略。

您可以将这些约束定义为外键约束,方法是再添加一个与[strategy]表具有1:1关系的表[company_default_strategy] (某些策略是默认的):

代码语言:javascript
复制
[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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9103542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档