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