需要数据库设计建议!
我们的客户正在运行SQL Server 2000/2012作为客户端 - 服务器系统的服务器部分。我们有大约120张桌子。到目前为止,我们的设计非常稳定,可扩展且最佳。
其中包括Appointments表,Users表和在这两者之间创建多对多关系的表。这样,对于每个约会,我们可以设置我们的用户应该参与该约会。
create table Appointments (
ID int not null identity(1,1),
StartDate datetime not null,
EndDate datetime not null,
...
)
create table Users (
ID int not null identity(1,1),
UserName nvarchar(100) not null,
...
)
create table Appointments_Users (
ID int not null identity(1,1),
UserID int not null,
AppointmentID int not null
)
alter table Appointments_Users add constraint FK_Appointments_Users_AppointmentID foriegn key (AppointmentID) references Appointments (ID)
alter table Appointments_Users add constraint FK_Appointments_Users_UserID foriegn key (UserID) references Users(ID)
当我们查询约会以获取X时间跨度的约会列表时,我们的问题就开始了。如果我们想要查看参与每个约会的逗号分隔的用户列表,我们需要一个接收约会ID的函数,并使用参与者名称连接一个字符串。这对性能有一定影响(虽然不是那么多)。
我们现在开始遇到更多这方面的问题,我们正在考虑在Appointments中添加另一个列,它将保留用户的连续列表,仅用于查看目的:
alter table Appointments add UsersString nvarchar(max)
这将需要在Appointments_Users和Users上启用触发器,这样无论何时添加用户从约会中删除,并且每当用户名更改时,字符串也会更改。我们仍然会保留当前的结构,因为它很好地规范化并且更适合搜索。
我们想知道这是否值得麻烦......以前有人这样做过吗?