如何在SQL中实现MECE(互斥,集体穷举)?

时间:2019-07-17 23:32:53

标签: sql relational-database rdbms

我正在寻找创建一系列表关系,它们将互斥,共同穷举,即形成给定集合的分区。例如,假设您有以下关系:

动物是(或仅是)猫或狗。

狗有名字和喜欢的玩具。猫有名字和喜欢的食物。

尝试在SQL中为这种关系建模的第一个方法是,将一个带有animals列的animalId表和一个带有dogs的{​​{1}}表以及dogId列,其中favoriteToy具有对dogId的外键引用。然后,您可能有一个带有animalIdcats列的catId表,其中favoriteFood具有对catId的外键引用。

但是,这有两个问题,一些似乎可以解决,有些没有。

  • 我可以添加引用同一animalId的{​​{1}}和dogId(我认为这不是基本问题,因为我可以在动物中添加两个成员的附加列由猫和狗复制并用于形成复合外键的枚举)
  • 我可以在catIdanimalId中都没有的animalId中添加一个animals

另一方面,我可以将所有内容标准化为具有catIddogId列的单个animals表,但这似乎没有约束,即这些列中只有一个必须不为空。

简而言之,我似乎可以确保相互排他,但不能确保集体排他性,或者我可以确保集体排他性,但不能确保相互排他。还有另一种方法可以同时给我和我吗?看来您可能需要某种循环依赖,但是我不确定是否有一种很好的方法可以在不涉及不必要的favoriteFood的情况下做到这一点(这似乎是一种治愈方法,胜于疾病) )。

0 个答案:

没有答案