推荐的数据库结构和使用C#的检索

时间:2019-06-05 19:05:57

标签: c# sql-server

我遇到的情况是,我的记录表看起来像(为了简洁起见,删除了详细信息):

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#对象。

1 个答案:

答案 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

请注意此评论:

  

为避免两次往返数据库来获取客户和   单独订购数据,可以使用多个结果集功能: