多对多关系的数据库设计

时间:2011-05-31 13:34:13

标签: sql-server database-design many-to-many

我正在重写MS Access数据库,不幸的是我们需要保留当前数据库中存在的一些奇怪的进程。我在进行数据库设计时遇到了一些麻烦,所以我希望得到一些建议/方向。

新表:

tblCurrentDayRecords
BusinessDate (PK)
Acct (PK)
ActivityDate (PK)
Type
RecordGuid

tblNotes
RecordGuid (PK)
NoteGuid (PK)
Note
NoteDate
NoteAddedBy

每天早上都会将数据添加到tblCurrentDayRecords。然后在UI中处理这些记录。处理记录时,会添加使用RecordGuid与记录相关的注释。

我在设计中遇到的问题是,每天我们都会将新记录添加到tblCurrentDayRecords表中,但可能会显示相同的帐户,如果有,则必须将前一记录中的记录向前桥接一天一天的。所以这个过程是这样的:

Day 
5/30 Acct 123456789 Note1, Note2
5/31 Acct 123456789 Note1, Note2, Note3
6/1  Acct 123456789 Note1, Note2, Note3, Note4, Note5

因此,如果每隔一天添加一个帐户,我需要将前一天的笔记移动到前一天。这些记录中的每一个都有一个新的RecordGuid,当它被添加到tblCurrentDayRecords表时生成。

我愿意使用Join表更改Notes表的设计,无论是为了使其工作,但我无法找到最佳方法来执行此操作而无需每天运行Insert或Update来绑定新的记录到以前的笔记。让我澄清并说我不能只使用新的RecordGuid更新Notes表,因为每天的记录仍然需要访问注释。

我希望这个解释足以得到一些关于如何继续的反馈或建议。

1 个答案:

答案 0 :(得分:3)

你在描述中丢失了我,但我可以告诉你,一般来说,对于多对多关系,你需要有一个表格,将表格1中的行与表格2中的行相关联这就是你要找的东西吗?

tblRecordNotes
  BusinessDate (PK)
  Acct (PK)
  ActivityDate (PK)
  RecordGuid (PK)

然后处理您的样本数据,您将执行以下操作:

INSERT INTO tblRecordNotes VALUES ('2011-05-30', 123456789, '2011-05-30', 'Note1');
INSERT INTO tblRecordNotes VALUES ('2011-05-30', 123456789, '2011-05-30', 'Note2');
INSERT INTO tblRecordNotes VALUES ('2011-05-31', 123456789, '2011-05-31', 'Note1');
INSERT INTO tblRecordNotes VALUES ('2011-05-31', 123456789, '2011-05-31', 'Note2');
INSERT INTO tblRecordNotes VALUES ('2011-05-31', 123456789, '2011-05-31', 'Note3');
INSERT INTO tblRecordNotes VALUES ('2011-06-01', 123456789, '2011-06-01', 'Note1');
INSERT INTO tblRecordNotes VALUES ('2011-06-01', 123456789, '2011-06-01', 'Note2');
INSERT INTO tblRecordNotes VALUES ('2011-06-01', 123456789, '2011-06-01', 'Note3');
INSERT INTO tblRecordNotes VALUES ('2011-06-01', 123456789, '2011-06-01', 'Note4');
INSERT INTO tblRecordNotes VALUES ('2011-06-01', 123456789, '2011-06-01', 'Note5');