开发环境是 C# 3.5,带有 SQL Server 2008 数据库和实体框架。
想象一下,您有一个名为 Sign 的类和一个表,它表示由您的软件需要控制的第三方创建的物理电子标志。您还有一个名为 SignDriver 的类,它负责与标志进行实际通信。标志的属性/列表示标志驱动程序正确与标志对话所需的可配置信息。
一切都很好,你已经非常彻底地拍了拍自己的背。然后需要与不同的星座交谈。但是,此标志的工作方式与前一个不同,需要您的 Sign 类和表来存储其他信息。假设需要存储 5 个新事物(列/属性),但不幸的是,第一种类型的符号不需要这 5 个事物。然后您会发现,当您要控制每种类型的 10 个符号时,您的表中有许多 NULL 值。
您的域模型会不断增长,直到您拥有更多像 Sign 这样的类,每个类都代表问题域的不同部分,并且每个类都在数据库中具有相应的表。每个班级都面临着收集其类型的共同信息的相同问题,但根本不能很好地满足每种类型的专业化。
你意识到你的问题的性质意味着将有更多类型的迹象需要控制,以及更多类型的其他实体需要迎合。您需要一个更可扩展的模型。
对于这样的系统,最好的前进方式是什么?
我已经与我的同事详细讨论了这个问题,并且真的很想知道解决此类问题的最佳方法是什么。特别是因为这似乎是许多人过去会面临的问题。
以下是我们提出的选项以及每个选项的一些要点:
- 为每个实体创建n个“类型”类和表,以与其共享 1 对 1 关系。
- 非常继承-y。
- 扩展时最耗时。
- 很多表。
- 为每个实体创建一个“扩展属性”表来保存键值对。
- 参照完整性。
- 可扩展。
- 创建一个全局“扩展属性”表来存储任何实体的属性。(架构:entityType、entityId、key、value、dataType)
- 超级可扩展。
- 不能与现有表具有参照完整性。
- 看起来实体框架不能很好地处理这个问题。
你会做什么,为什么?
非常感谢任何帮助。干杯。