数据库关系周期

Zyp*_*rax 4 database-design cycle relationship

数据库关系周期就像糟糕的数据库设计.以下是我认为无法阻止的情况:

  • 一个公司地点(城市)
  • a 公司产品(巨无霸)

  • 地点无法提供产品(沙特阿拉伯没有培根汉堡)

目前的设计将允许你提供的产品属于本公司的位置属于该公司.

公司
1 - 麦当劳
2 - 汉堡王

位置
1 - 纽约,1号楼 - 麦当劳(1)
2 - 阿姆斯特丹,2号楼 - 汉堡王(2)

产品
1 - 巨无霸 - 麦当劳(1)

产品位置
1 - 巨无霸(1) - 阿姆斯特丹,2号楼(2)

麦当劳销售的巨无霸,汉堡王没有,但似乎他们的建筑呢:)
当我们添加到它的关系变得更差的产品,同时也是位置相关的.

我该怎么做才能防止循环?
如何确保数据库数据完整性?

nvo*_*gel 5

循环依赖不是自动"糟糕的数据库设计".从概念建模的角度来看,如果这种依赖关系准确地表示了您要模拟的内容,那么它就不是"错误的".

不幸的是,SQL的局限性常常使得强制或不可能强制执行周期性约束.在SQL中,您通常必须通过以某种方式破坏约束或通过在过程代码中实现规则而不是通过数据库约束来妥协.


Dam*_*vic 4

如果我们从LocationCompanyProduct作为独立实体开始——正如我认为您试图:

在此输入图像描述

create table ProductAtLocation (
      CompanyID  integer
    , LocationID integer
    , ProductID  integer
);

alter table ProductAtLocation
    add constraint pk_ProdLoc  primary key (CompanyID, LocationID, ProductID)
  , add constraint fk1_ProdLoc foreign key (CompanyID, LocationID) references CompanyLocation (CompanyID, LocationID)
  , add constraint fk2_ProdLoc foreign key (CompanyID, ProductID)  references CompanyProduct  (CompanyID, ProductID)
;
Run Code Online (Sandbox Code Playgroud)

如果Product是依赖实体(取决于公司):

在此输入图像描述