Sql 数据库结构:如何基于'定义表中键的唯一性;祖父母';桌子

Sql 数据库结构:如何基于'定义表中键的唯一性;祖父母';桌子,sql,database,database-design,foreign-keys,unique-index,Sql,Database,Database Design,Foreign Keys,Unique Index,很难表达问题的标题,因为我缺乏我想要达到的目标的术语,所以我将用我想要做的精确例子来写它 拥有这些表格: Table market{ id integer [pk] code varchar(32) [not null, unique] name varchar(32) [not null] } Table outcome{ id integer [pk] market integer [not null, ref: > market.id] # Referenc

很难表达问题的标题,因为我缺乏我想要达到的目标的术语,所以我将用我想要做的精确例子来写它

拥有这些表格:

Table market{
  id integer [pk]
  code varchar(32) [not null, unique]
  name varchar(32) [not null]
}

Table outcome{
  id integer [pk]
  market integer [not null, ref: > market.id]   # References market
  code varchar(32) [not null, unique]
  name varchar(32) [not null]
}

Table game{
  id integer [pk]
  match integer [not null, ref: > match.id]     # References match
  outcome integer [not null, ref: > outcome.id] # References outcome
  odd float [not null]
  status integer [not null, ref: > status.id]
  won bool [null]
}
如何在表
游戏中添加唯一键
以确保只有
结果
市场
匹配('grand-parent relationship')具有
非空值

乙二醇


大多数数据库都允许筛选唯一索引或类似的内容

create unique index unq_game_market_match
    on game(market, match)
    where outcome is not null;

在那些没有的数据库中,您可以对计算列和/或函数索引执行类似的操作。

请用您正在使用的数据库标记。@GordonLinoff它将是MySQL或postgre,这就是为什么我没有用它标记问题,因为我在软件中寻找一个概念,而不是一个特定的解决方案。不过,谢谢你的回答
create unique index unq_game_market_match
    on game(market, match)
    where outcome is not null;