我正在构建一个支持用户之间不同类型消息的MVC Web应用程序。例如,某些消息与RFP相关联,而其他消息与发票相关联。我们可能会被要求在将来支持其他消息类型。
所以这是我到目前为止提出的架构。
MessageThread
Id int PK
消息
Id int PK
MessageThreadId int FK
UserId uniqueidentifier FK
Subject nvarchar(250)
Text nvarchar(max)
DateCreated datetime
RFPMessageThread
RFPId int PK/FK
MessageThreadId int PK/FK
InvoiceMessageThread
InvoiceId int PK/FK
MessageThreadId int PK/FK
这应该有效,但我怀疑这是否是最好的路线。显然,如果我只有一种消息类型,我可以删除MessageThread
表。
有任何建议,建议和批评吗?
答案 0 :(得分:3)
这是经典的表继承模式问题,有3个已建立的解决方案:
每个人都有利弊。您使用了类表继承,这是大多数开发人员自然而然地遵循代码的设计模型并且看起来规范化的。但是性能更差,因为它需要频繁的连接,插入和更新是昂贵的,并且数据完整性实施是复杂的。我更赞成单表继承模型:一个且只有一个表[Messages]
,因为它在最频繁的访问模式中具有简单性和运行时性能(例如,显示我的'收件箱'是一个简单而快速的查询)。我建议您使用所提出的模型,在负载下并使用合理的大型数据集进行一些测试。