2013-07-01 43 views
1

我经常编写对数据库实体具有依赖性的代码。我想最大限度地减少这些不同系统之间的耦合(或使其明确而健壮)。如何处理数据库条目的依赖关系

示例:我有一个下拉列表的错误类别,用户可以定义新的类别,但是一个类别是特殊的,属于它的错误会得到一个额外的输入字段。因此,系统需要知道用户何时选择了特殊类别,并且该特殊类别不允许消失。

你将如何处理该特殊类别?你会匹配类别名称或ID吗?你会把这个实体放在迁移中,还是让你的代码根据需要重新生成它?你是否从数据库中省略它,并让它只存在于你的代码中?每次出现这个问题时,我都会发现自己会选择新的解决方案,但我从来没有对它们感到满意。

有没有人找到满意的解决方案?你发现了什么缺点,你是如何缓解它们的?

回答

1

我不喜欢特殊的大小写代码,所以我会将它设计为全部在数据模型中。数据库将得到一个可删除字段,并且有一个特殊的输入字段,用某种方式来描述那个特殊输入是什么。我也试图确保我没有过度设计特殊输入的东西,因为目前只有这种情况。

+0

所以你会添加一个触发功能的列或类似的东西?比如说,当选择特殊类别时,验证规则会改变。你会检查category.warrants_lax_validation – Jauco

+0

类别模式看起来像Id,Name,CanDelete,SpecialInput。这样删除代码检查CanDelete标志,而不是硬编码值。相同的特殊输入,根据复杂性检查标志,外键或连接表。一般而言,代码应该尽可能一般地处理数据,任何特殊的属性或决策都应该由正在处理的数据驱动,而不是因为执行处理的代码认为它知道发生了什么。代码应该知道如何识别和处理特殊情况,但不是先验的。 – stonemetal