我正在创建一个WCF Web服务并使用Fluent Nhibernate映射我的域模型,我注意到对象可以用不同的方式表示,它背后的数据也可以表示。
基本上我有三个表,一个是Meetings表,一个是MeetingPlaces表,另一个是Attendee表。基本上,该应用程序将起作用,以便建立会议,并且参加者将参加,但他们也将投票选择位置。所以基本上很多会议都有很多与会者,而且许多与会者都有很多投票(授予约束权,使得他们每次会议只有一票。看起来就像这样。所以为了表示这个,我有三个基表和一个To To很多(对很多人来说?表)
CREATE TABLE Meetings (
Id INT NOT NULL PRIMARY KEY IDENTITY,
Name NOT NULL,
StartTime DATETIME NOT NULL,
EndTime DATETIME NULL,
)
CREATE TABLE Attendees (
Id INT NOT NULL PRIMARY KEY IDENTITY,
Name NOT NULL
)
CREATE TABLE MeetingPlaces (
Id INT NOT NULL PRIMARY KEY IDENTITY,
Name NOT NULL,
Address NULL
)
CREATE TABLE MeetingAttendees (
Id INT NOT NULL PRIMARY KEY IDENTITY,
MeetingId INT NOT NULL,
AttendeeId INT NOT NULL,
MeetingPlaceId INT NULL, --in case they have no preference
CONSTRAINT FK_MeetingAttendees_To_Events FOREIGN KEY (MeetingId) REFERENCES Meetings(Id),
CONSTRAINT FK_MeetingAttendees_To_Attendees FOREIGN KEY (AttendeeId) REFERENCES Attendees(Id),
CONSTRAINT FK_MeetingAttendees_To_MeetingPlaces FOREIGN KEY (MeetingPlaceId) REFERENCES MeetingPlaces(Id)
)
GO
CREATE UNIQUE INDEX U_IDX_Meeting_Attendees ON MeetingAttendees(MeetingId, AttendeeId)
GO
我的问题是,使用此结构或创建两个单独的表是否更好。一个代表出席会议的与会者,另一个代表与会者对与会者的投票:
CREATE TABLE MeetingAttendees
Id INT NOT NULL PRIMARY KEY IDENTITY,
MeetingId INT NOT NULL,
AttendeeId INT NOT NULL,
CONSTRAINT FK_MeetingAttendees_To_Events FOREIGN KEY (MeetingId) REFERENCES Meetings(Id),
CONSTRAINT FK_MeetingAttendees_To_Attendees FOREIGN KEY (AttendeeId) REFERENCES Attendees(Id),
)
GO
CREATE UNIQUE INDEX U_IDX_Meeting_Attendees ON MeetingAttendees(MeetingId, AttendeeId)
CREATE TABLE AttendeeVote(
Id INT NOT NULL PRIMARY KEY IDENTITY,
MeetingAttendeeId INT NOT NULL,
MeetingPlaceId INT NULL,
CONSTRAINT FK_AttendeeVote_To_MeetingAttendees FOREIGN KEY (MeetingAttendeeId) REFERENCES MeetingAttendees(Id),
CONSTRAINT FK_AttendeeVote_To_MeetingPlaces FOREIGN KEY (MeetingPlaceId) REFERENCE MeetingPlaces(Id)
)
我很担心因为我不确定Fluent-NHibernate将如何处理第一个解决方案,而第二个解决方案似乎更具结构性。
答案 0 :(得分:0)
每个多对多关系之间应该有一个关联实体。
如果我理解你的情况:
这将被规范化并正确表示您的应用程序的行为。
有些人会争辩说,如果这个应用程序的阅读时间比你应该去标准化的时间长90%,那么如果你经常阅读和写作,你应该有两个独立的关联实体。