SQL Server架构审核

时间:2012-01-27 19:51:52

标签: sql-server sql-server-2008 schema

我正在构建一个支持用户之间不同类型消息的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表。

有任何建议,建议和批评吗?

1 个答案:

答案 0 :(得分:3)

这是经典的表继承模式问题,有3个已建立的解决方案:

每个人都有利弊。您使用了类表继承,这是大多数开发人员自然而然地遵循代码的设计模型并且看起来规范化的。但是性能更差,因为它需要频繁的连接,插入和更新是昂贵的,并且数据完整性实施是复杂的。我更赞成单表继承模型:一个且只有一个表[Messages],因为它在最频繁的访问模式中具有简单性和运行时性能(例如,显示我的'收件箱'是一个简单而快速的查询)。我建议您使用所提出的模型,在负载下并使用合理的大型数据集进行一些测试。