Database design 复合主键可以用来阻止链接不相关的对象吗?

Database design 复合主键可以用来阻止链接不相关的对象吗?,database-design,primary-key,composite-key,composite-primary-key,Database Design,Primary Key,Composite Key,Composite Primary Key,如果我在(说出你最喜欢的框架)中有几个模型: #伪代码 等级水果 主键=复合键(租户id、对象id) 重量=分米尔菲尔德() 高级餐厅 主键=复合键(租户id、对象id) haz_奶酪汉堡=布尔菲尔德() 水果可用=外键(水果)#如果我理解正确,您可能可以设置外键。在餐厅的桌子上 FOREIGN KEY (tenant_id, fruit_available) REFERENCES fruit (tenant_id, fruit_available) 这部分取决于您的dbm

如果我在(说出你最喜欢的框架)中有几个模型:

#伪代码
等级水果
主键=复合键(租户id、对象id)
重量=分米尔菲尔德()
高级餐厅
主键=复合键(租户id、对象id)
haz_奶酪汉堡=布尔菲尔德()

水果可用=外键(水果)#如果我理解正确,您可能可以设置外键。在餐厅的桌子上

FOREIGN KEY        (tenant_id, fruit_available) 
  REFERENCES fruit (tenant_id, fruit_available)
这部分取决于您的dbms,部分取决于
水果(租户id,水果可用)
上是否有任何类型的唯一约束


不过,这不会妨碍您将错误的租户id用作餐厅主键的一部分

我想知道的是,我是否能阻止自己(通过一个约束)将一家餐厅
与作为
租户id的
租户
链接,并将其链接到一个有
租户id的
水果
,你试过我的答案吗?发生了什么事?我实际上没有能力在我当前的代码中使用复合键,这就是为什么我以抽象的方式提问而不是给出实际的代码示例等。我很好奇,因为Django一直在努力(慢慢地)将复合PKs引入核心框架。@orokusaki:当然,你可以在当前的代码中使用复合键,至少是为了测试。打开开发数据库的SQL实用程序,输入
altertable
语句以创建外键。然后尝试输入有效数据,然后尝试输入无效数据。无论您使用什么ORM,您都可以直接到数据库进行测试。
FOREIGN KEY        (tenant_id, fruit_available) 
  REFERENCES fruit (tenant_id, fruit_available)