【问题标题】:Recommended database structure and retrieval using C#使用 C# 推荐的数据库结构和检索
【发布时间】:2019-06-05 19:05:57
【问题描述】:

我有一个类似的记录表(为简洁起见,删除了详细信息):

CREATE TABLE Records (
    RecordsId int,
    Description varchar(255)
);

我想使用另一个表为每条记录添加多个 cmets,例如:

CREATE TABLE Comments (
    CommentsId int,
    Comment varchar(255)
);

我知道我可以使用 join 语句链接表,但是如果有一个记录附加了多个 cmets,我将如何有效地检索信息,而 cmets 的数量没有设置?

RecordsId
Description
    - Comment 1
    - Comment 2
    - Comment 3
    - Comment .....

我知道我可以运行一个查询来获取第一个表的值,然后对第二个表运行第二个查询,但是当我有大量记录时,这会非常慢。我正在尝试使用这些值填充 C# 对象。

【问题讨论】:

  • 这是一个非常广泛的问题;首先请选择一个数据访问策略/库/ORM,然后我们可以提供更有针对性的建议。您的 Comments 表需要一个 RecordID 列
  • 如果这是一个使用 C# 的新建站点,您会推荐什么?
  • 如果我正在编写新代码。我会使用 Dapper ORM 框架:stackoverflow.com/questions/6317937/…

标签: c# sql-server


【解决方案1】:

//为每条记录添加多个cmets //

您需要将评论中的 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的名称。 “记录”和“评论”是实体名称。同样,这是一场圣战。

我更喜欢 MyObjectKey 而不是“Id”。

考虑一下。什么是“员工 ID”?那是一个 db-surrogate-key 吗?或者这是员工穿在衬衫上的徽章的价值? “身份证”是模棱两可的。恕我直言,“钥匙”更清楚。

......

根据您的评论,“我将在新代码中使用什么?”

我会使用 Dapper ORM,它是一种微型 ORM,但性能非常好。

这篇文章会带你去那里:

https://medium.com/dapper-net/handling-multiple-resultsets-4b108a8c5172

注意这条评论:

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

【讨论】:

  • 谢谢,但这只会防止表之间的链接被破坏吗?然后我将如何检索第一个表的长列表,其中每行都有一个列表,使用单个查询中的第二个表创建?关于 Key 的主题,是的,这是一个很好的观点。
  • 您需要学习如何将 db-data 序列化为 c# 对象。因此,Caius 的一条评论是关于“你的 ORM 是什么?” .您可以使用 IDataReader 进行手图。看到我的回答这个帖子:stackoverflow.com/questions/16175972/…
  • 这是另一篇关于使用 IDataReader 的文章。 stackoverflow.com/questions/5758526/…
  • FK 是相对可选的,顺便说一下。系统当然可以在没有 FK 的情况下工作..
猜你喜欢
  • 2013-08-20
  • 2013-06-25
  • 1970-01-01
  • 2010-11-14
  • 2016-02-26
  • 1970-01-01
  • 2011-10-07
  • 2017-10-10
  • 2011-08-11
相关资源
最近更新 更多