我遇到的情况是,我的记录表看起来像(为了简洁起见,删除了详细信息):
CREATE TABLE Records (
RecordsId int,
Description varchar(255)
);
我想使用另一个表为每个记录添加多个注释,例如:
CREATE TABLE Comments (
CommentsId int,
Comment varchar(255)
);
我知道我可以使用join语句链接表,但是如果有一个Record带有附加的多条注释而没有注释的数量,那么如何有效地检索信息?
例如
RecordsId
Description
- Comment 1
- Comment 2
- Comment 3
- Comment .....
我知道我可以运行查询以获取第一个表的值,然后对第二个表运行第二个查询,但是当我有大量记录时,这将非常慢。我正在尝试使用这些值填充C#对象。
答案 0 :(得分:1)
///为每个记录添加多个注释//
您需要从评论添加FK回到记录。
CREATE TABLE dbo.Record (
RecordKey int,
Description varchar(255)
);
CREATE TABLE dbo.Comment (
CommentsKey int,
RecordKey int NOT NULL,
Comment varchar(255)
);
ALTER TABLE [dbo].[Comment]
ADD CONSTRAINT [FK_Comment_To_Record]
FOREIGN KEY (RecordKey)
REFERENCES [dbo].[Record] (RecordKey)
..
其他内容:
使用模式名称创建表/对象。内置默认值为“ dbo”。
我更喜欢表名使用单数名词。这是一场圣战。我认为表格应该是ENTITY的名称。 “记录”和“注释”是实体名称。再次,这是一场神圣的战争。
相对于“ Id”,我更喜欢MyObjectKey。
考虑一下。什么是“ EmployeeId”?那是db-surrogate-key吗?还是这是员工戴在衬衫上的徽章上的价值? “ Id”不明确。 “键”更清晰,恕我直言。
......
根据您的评论,“我将在新代码中使用什么?”
我会使用Dapper ORM,它是一个微型Orm,但性能确实很好。
本文将带您到达那里:
https://medium.com/dapper-net/handling-multiple-resultsets-4b108a8c5172
请注意此评论:
为避免两次往返数据库来获取客户和 单独订购数据,可以使用多个结果集功能: