Database 如何处理对数据库项的依赖关系

Database 如何处理对数据库项的依赖关系,database,design-patterns,decoupling,Database,Design Patterns,Decoupling,我经常编写依赖于数据库实体的代码。我希望尽量减少这些不同系统之间的耦合(或使其明确和健壮) 示例:我有一个错误类别的下拉列表,用户可以定义新的类别,但有一个类别很特别,属于它的错误会得到一个额外的输入字段。因此,系统需要知道用户何时选择了特殊类别,并且不允许该特殊类别消失 你将如何处理这一特殊类别?你会在类别名称或id上匹配吗?您是将实体放入迁移中,还是让代码根据需要重新生成它?您是否将其从数据库中省略,并使其仅存在于您的代码中?每次这个问题出现时,我都会选择新的解决方案,但我从来都不太满意 有

我经常编写依赖于数据库实体的代码。我希望尽量减少这些不同系统之间的耦合(或使其明确和健壮)

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

你将如何处理这一特殊类别?你会在类别名称或id上匹配吗?您是将实体放入迁移中,还是让代码根据需要重新生成它?您是否将其从数据库中省略,并使其仅存在于您的代码中?每次这个问题出现时,我都会选择新的解决方案,但我从来都不太满意


有人找到了令人满意的解决方案吗?您发现了哪些缺点以及如何减轻这些缺点?

我不喜欢特例代码,所以我会将其全部设计为数据模型。数据库将得到一个can delete字段,并且有一个特殊的输入字段,用某种方式来描述该特殊输入是什么。我也会尽量确保我没有过度设计特殊的输入内容,因为到目前为止只有这种情况。

我不喜欢特殊情况代码,所以我会将其设计为全部都在数据模型中。数据库将得到一个can delete字段,并且有一个特殊的输入字段,用某种方式来描述该特殊输入是什么。我也会尽量确保我没有过度设计特殊的输入内容,因为到目前为止只有这种情况。

那么你会添加一列触发功能或类似的内容吗?例如,当选择特殊类别时,验证规则会更改。您需要检查category.carries\u lax\u validation类别模式看起来像Id、Name、CanDelete和SpecialInput。这样,删除代码将检查CanDelete标志,而不是硬编码的值。对于特殊输入也一样,根据复杂性检查标志、外键或联接表。一般来说,代码应该尽可能通用地处理数据,任何特殊属性或决策都应该由正在处理的数据驱动,而不是因为进行处理的代码认为它知道发生了什么。代码应该知道如何识别和处理特殊情况,但不是先验的?例如,当选择特殊类别时,验证规则会更改。您需要检查category.carries\u lax\u validation类别模式看起来像Id、Name、CanDelete和SpecialInput。这样,删除代码将检查CanDelete标志,而不是硬编码的值。对于特殊输入也一样,根据复杂性检查标志、外键或联接表。一般来说,代码应该尽可能通用地处理数据,任何特殊属性或决策都应该由正在处理的数据驱动,而不是因为进行处理的代码认为它知道发生了什么。代码应该知道如何识别和处理特殊情况,但不能先验地这样做。