- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我面临以下问题。
我正在建立一个人类信息数据库。所有人都可以分为三类:成年女性、成年男性、儿童。很明显,“高度”和“重量”等参数适用于所有类别。参数“子女人数”仅适用于成年人,而参数“怀孕人数”仅适用于女性。此外,根据类别的不同,每个参数都可以分为强制参数或可选参数(例如,对于成年人,参数“前伴侣数量”是可选的)。
当我加载(比如说)“height”和“weight”时,我检查这两个字段中的信息是否自洽。也就是说,我把身高=6'4''体重=10磅的记录标错了(显然,这在生理上是不可能的)。我有几个类似的验证规则。
当我插入一个关于人类的记录时,我需要反映信息的以下特征:
这个特定人类类别的最大可能信息(包括所有可选参数)。
类别所需的最少信息量(即,仅限必需字段)
为这个特定的人实际插入的内容(即,无论是否小于所需的最小信息量,都可以为这个人插入我所拥有的内容)。这里不重要的问题是,字段“xxx”可能有空值,因为我从未在其中插入任何内容,或者是因为我故意插入了空值。与具有默认值的字段相同的逻辑。所以应该在某个地方反映出我处理过这个特殊的领域。
已验证插入的信息量(即,即使我加载了大约5个字段,也只能检查3个字段的自一致性,而忽略了剩余的2个字段)。
所以我的问题是如何从技术上组织它。目前,所有这些必需的特性要么是硬编码的,没有统一的逻辑,要么被分解成完全独立的块。我需要建立一个统一的方法。
在这方面我有一些天真的想法。例如,对于每一类人,我可以创建并存储一个可能字段的列表(我称之为“模板”)。a可以标记那些必需的字段。
当我插入一个关于人类的记录时,我复制模板并标记这个模板中的哪些字段实际上已经被处理过。在下一阶段,我可以在模板的这个副本中标记那些当前将被验证的字段。
验证模块按以下方式进行了特别更正:对于每个验证过程,我创建一个列表,其中列出了在该特定验证过程中使用的字段。然后,我只调用那些验证过程,这些过程中的字段在模板的副本中实际标记为“待验证”,用于要验证的特定人员(见上一段)。
如你所见,这是解决这个问题最直接的方法。但我的猜测是,有很多相当标准化的方法,我并不知道。我真的怀疑我是世界上第一个解决这个问题的人。我不喜欢我的解决方案,因为编写代码来正确地反映复制的模板中记录发生的所有“更新”是非常痛苦的。
所以,我请你谈谈你对如何解决这个问题的看法。
最佳答案
我想这里有两个问题:
如何在数据库中存储多态数据?
如何验证复杂的业务规则?
你应该把它们分开来处理——试图同时解决这两个问题可能太难了。
例如,有几种方法可以处理rdbmses-orms中的多态数据,使用术语inheritance mapping。这里的三个解决方案——每类层次结构表、每子类表和每具体类表——是“纯”关系解决方案。您还可以使用“Entity-Attribute-Value”设计,或使用文档方法(以xml或json等结构化格式存储数据)——这些不是“纯”关系选项,而是有它们的位置。
验证复杂的业务规则通常是使用rule engines来完成的—这些都是非常酷的技术,但您必须确保您的问题真正符合他们的解决方案—决定投资于规则引擎意味着您的项目将更改为规则引擎项目,而不是“人类”项目。或者,大多数主流的解决方案都体现了应用程序业务逻辑层中实体的业务逻辑。听起来你已经长大了。
关于database - 有经验的数据库架构师的话题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15644274/
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我们使用 Azure 弹性池,生成多个客户端数据库和一个引用客户端数据库的主数据库。 我们已经拥有多个数据库,并且正在开发新版本的代码。我们使用 EF6 代码优先。当我们对模型进行更改(添加属性)时,
我希望将一些信息分发到不同的机器上,以便在没有任何网络开销的情况下实现高效和极快的访问。数据存在于关系模式中,实体之间的关系是“加入”的要求,但根本不是写入数据库的要求(它会离线生成)。 我非常相信
我使用 GrapheneDB 来托管我的 neo4j 数据库 (db)。 问题 我有 N客户并且正在寻找自动分离他们的内容(他们独特的数据库)的方法,以便: 它不重叠数据 操作速度不受影响。 选项 1
当服务器开始工作(Tomcat)时,日志显示此错误: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid b
我在 Oracle 数据库实例中按以下方式创建了一个触发器。 CREATE OR REPLACE TRIGGER after_logon_on_database AFTER LOGON ON DATA
原谅我的无知,我是数据库约定的初学者。 这是我的 SQLite 代码:(由我的数据库浏览器自动生成) CREATE TABLE `ResearchItems` ( `ID` INTEGER NO
是的是的是的,我已经在整个互联网上搜索过这个问题。一些结果发现,甚至来自 Stackoverflow。但是他们中的大多数人说“你应该自动加载数据库”,或者“parent::__construct();
我正在创建一个 Mac 应用程序,它将一些数据保存到 SQLite 数据库中。问题是:当我关闭数据库并再次打开时,数据不存在了。这是我的代码: NSString *sql = [NSString st
我正在建立一个网站,我打算发布各种帖子,比如教程、文章等。我打算用 php 来管理它,但是当涉及到存储每个帖子的内容时,将要显示的文本,更好的选择是:使用单独的文本文件还是将其添加为数据库中的每个条目
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
对不起,这个关键字对我来说没有任何意义...有人可以给我一个定义吗? 提前致谢... 最佳答案 这是一个品牌。 http://pervasive.com/这是他们的数据库产品的链接 http://ww
我已经在 docker 版本 1.10.1 的 docker 镜像中安装了 PostgreSQL 9.4.6。根据这张官方图片: https://github.com/docker-library/p
当我的 android 应用程序尝试读取 android 短信数据库时,我遇到了这个崩溃。读取android短信数据库的代码类似于下面的代码 fragment : String SMS_URI = "
我有一个 public kit repo,我推送了 v1.0.3 并具有以下结构 go -database --database.go --go.mod --go.sum 我需要它 require g
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
我们正在使用MySQL数据库在Go中创建一个Web应用程序。我们的用户一次只能拥有一个活跃的客户端。就像Spotify一样,您一次只能在一台设备上听音乐。为此,我制作了一个映射,将用户ID和作为其值的
我已经尝试在 PostgreSQL 中创建数据库好几天了,遇到了几个问题,但似乎卡住了。 我在 PostgreSQL 中手动创建了一个名为 postgres_development 的数据库,因为 b
我正在创建一个 iMessage 应用程序,它需要连接到与我的常规应用程序相同的数据库。 我调用 FirebaseApp.configure() 并对用户进行身份验证,但出于某种原因,在所有 Data
就像std::unordered_map但所有数据都应存储在磁盘上而不是内存中。 按照我的理解,应该做两部分:索引和存储。我已经学习了一些关于索引的数据结构,比如 Linear-Hash 或 B-Tr
我是一名优秀的程序员,十分优秀!