【发布时间】:2013-01-12 08:05:14
【问题描述】:
我们系统中的一个进程负责根据某些规则发送文件。根据文件名,文件可以发送给客户或工厂(但不能同时发送给两者)。
规则的每一行都会包含文件名过滤器、它所属的客户和工厂,并指定其他参数,例如目标文件夹、文件是否需要加密、拆分、合并、重命名等。
在这个过程中,我们会知道一个文件所属的工厂和客户,我们会查看工厂和客户的规则并对匹配过滤器的文件应用规则(将优先考虑客户规则)
在数据库中表示规则与客户/工厂之间关系的最佳方式是什么?我们已经在数据库中有 Customer 和 Factory 表,但我想不出表示这种关系的最佳方式。每行规则都将有一个 FK(客户或工厂,它不能同时拥有,也不能没有)。表示这一点的一种方式是:
但这并没有捕捉到它只能具有两个 FK 之一的事实。我们可以设置一个约束,其中一个必须是有效的 FK,另一个必须为空,但它似乎不是很干净。此外,如果我们有其他规则决定因素(例如国家),它会变得更丑陋。知道如何改进这个设计吗?
我认为这也有助于指定系统是在 .NET 中开发的,并且我们使用对象关系映射,即 NHibernate。
【问题讨论】:
-
如果客户和工厂之间有一些共享数据,显而易见的是引入一个客户和工厂都派生的基类。然后 FK 将转到基类
标签: .net database hibernate nhibernate database-design