使用默认值添加基于外键的业务条件

时间:2014-10-07 02:49:28

标签: mysql database schema rdb

我正在尝试使用非常高度可配置的系统创建规范化的数据库模式。这是挑战:

我们的客户不断接收工作,每个工作都有一些外键的值,可用于系统的其他各个部分。我们希望允许我们的客户根据这些外键指向的位置自定义许多配置选项。一般来说,这很容易,但我们也想让它们指定默认配置(即如果它们不关​​心FK1指向的位置)。例如,我们的jobs表看起来像这样:

Jobs
{
   ID,
   ConfirmationNumber,
   Company_ID,
   FK1,
   FK2,
   FK3,
   FK4,
   Cost,
   Price,
   Total,
   DateCompleted
}

我们希望允许他们根据FK1-4指定配置,但具有可选的默认值。截至目前,我们已经创建了一个包含FK 1-4的配置表,以及所有配置选项。我们允许任何FK为NULL来指定它们不关心那个FK(即默认为任何值),所以这是我们的表的样子:

Configs
{
   ID,
   Company_ID,
   FK1 (allow NULL),
   FK2 (allow NULL),
   FK3 (allow NULL),
   FK4 (allow NULL),
   Config1,
   Config2,
   ConfigN
}

我对正常形式的了解低于平均水平,所以我不确定哪一个违反了,但我确定它违反了其中一个。对我而言,似乎违反了2NF,因为有时Config1-N将仅依赖于FK的子集。整个FK + Company_ID组成候选键,因为每个公司每组只应有一个唯一的配置。但是,通过允许NULL,唯一索引仍将允许许多重复行与任何FK的NULLed out。有更好的解决方案吗?对我来说,最“正常”似乎是FK和相应配置的每个排列的表格,但是对于我们拥有的外键数量来说这并不实际。

0 个答案:

没有答案