【发布时间】:2011-08-09 17:28:55
【问题描述】:
我有大量的实例需要在我的数据库中实现某种多态关联。我总是浪费大量时间重新考虑所有选项。这是我能想到的3个。我希望 SQL Server 有一个最佳实践。
这里是多列方法
这里是没有外键的方法
这是基表方法
【问题讨论】:
-
看这里:stackoverflow.com/questions/2002985/…。它提倡您使用第三种方法,我认为这是最好的,因为它允许在不向关联表添加新(稀疏)列的情况下添加新表,并且具有引用完整性。
-
方法 1 是维护的噩梦。例如,添加 Object4 将需要全栈更改,因为 Something 表/类/模型/视图都必须更改。方法 2 更好,但任何引用完整性都必须在数据库外部强制执行。最后一种方法是最灵活的,因为您可以(可能)在其之上创建更多通用逻辑和 UI 层,从而减少对架构和使用它的事物的更改。
-
不是直接的答案,而是需要考虑的问题。如果我实际上不需要非规范化我的值(比如文档或设备配置),我会将对象存储为 SQLXML。这样做可以解决这个问题,并且 SQL 对针对它的查询有很好的原生支持。当用例适合时,它可以为您节省大量精力。这些类型的挑战也促使我想到 MongoDB 等 No-SQL 解决方案。我经常在我的产品中同时使用 SQL 和 MongoDB,因为它们各有千秋。
-
对于#3,单个对象记录可以同时是对象1、对象2和/或对象3,即多重继承这一事实如何?在某些情况下您可能希望这样做,但如果您不需要并且需要 Object1、Object2 和 Object3 在 ObjectID 上互斥,该怎么办?
标签: sql-server associations polymorphic-associations database-normalization