我面临以下问题。
我正在为(比如说)人类信息创建一个数据库。所有的人都可以归为以下三类之一:成年女性、成年男性、儿童。很明显,“身高”和“体重”等参数适用于所有类别。参数“子女数”仅适用于成人,而参数“怀孕数”仅适用于女性。此外,每个参数可以根据类别分为强制或可选(例如,对于成年人,参数“前伴侣的数量”是可选的)。
当我加载(比如说)“身高”和“体重”时,我会检查这两个字段中的信息是否是自洽的。即,我将 height=6'4'' 和 weight=10 lb 的记录标记为错误(显然,这在物理上是不可能的)。我有几个类似的验证规则。
当我插入关于一个人的记录时,我需要反映信息的以下特征:
- 此特定人的类别的最大可能信息(包括所有可选参数)。
- 类别所需的最少信息(即,仅限必填字段)
- 为这个特定的人实际插入的内容(即,可以插入我为这个人所拥有的任何内容,无论它是否小于所需的最少信息量)。这里的重要问题是字段“XXX”可能具有 NULL 值,因为我从未在其中插入任何内容,或者因为我故意插入了 NULL 值。具有默认值的字段的逻辑相同。所以应该在某个地方反映出我已经处理了这个特定的字段。
- 已验证插入的信息量(即,即使我加载了大约 5 个字段,我也只能检查 3 个字段的自洽性,而忽略剩下的 2 个字段)。
所以我的问题是如何在技术上组织它。目前,所有这些必需的功能要么被硬编码,没有统一的逻辑,要么被分解成完全独立的块。我需要创建一个统一的方法。
在这方面,我脑子里有一些幼稚的想法。例如,对于每个类别的人,我可以创建并存储可能字段的列表(我称之为“模板”)。A 可以标记那些必填字段。
当我插入关于一个人的记录时,我会复制模板并标记该模板中的哪些字段实际上已被处理。在下一阶段,我可以在此模板副本中标记当前将验证的那些字段。
验证模块通过以下方式进行了特别修正:对于每个验证程序,我创建一个在此特定验证程序中使用的字段列表。然后,我只调用那些在模板副本中实际标记为“待验证”的字段的验证过程,以供要验证的特定人员使用(参见前面的段落)。
如您所见,这是解决此问题的最直接方法。但我的猜测是,有很多我不知道的非常标准化的方法。我真的怀疑我是世界上第一个解决这样一个问题的人。我不喜欢我的解决方案,因为编写代码以在这个复制的模板中正确反映记录中发生的所有“更新”真的很痛苦。
所以,我请你分享你的意见,你将如何解决这个问题。