【问题标题】:Optimum performance in tag (keyword) feature implementation in ASP.NET MVCASP.NET MVC 中标签(关键字)功能实现的最佳性能
【发布时间】:2014-06-28 15:49:50
【问题描述】:

我有一个 ASP.NET MVC 应用程序,其中包含通过实体框架访问的 Microsoft SQL Server 数据库。我想实现一个标签/主题标签/关键字功能。我在应用程序中有多种类型的对象,但它们都有标签,并且可以使用这些标签搜索和找到它们。

我对如何实现此功能感到困惑。

以下是我想到的一些方法: 1. 目前,每个对象的 ID 都是整数,范围从 0 到 n。这是一个问题,因为 ID 1156 可以引用多个对象:Table1 中的第 1156 行,Table2 中的第 1156 行。我是否应该将 ID 的实现更改为字符串 GUID?

  1. 我应该为标签创建一个表和一个单独的表来将关键字与对象相关联吗? (TagGuid、ObjectGuid)。此实现需要另一个查询来查找对象。

  2. 我是否应该在每个名为 Tags 的表中创建一个列并将选项卡列为字符串? “标签1标签2标签3”?就搜索查询的持续时间而言,这将如何影响性能?如果需要统计某个标签下的对象怎么办?

也在寻找其他可能的解决方案。为含糊而道歉,我不知道从哪里开始 - 我可以选择任何一种实现,但我认为可能有一种神圣的方式来完成这项任务。

【问题讨论】:

    标签: c# sql-server asp.net-mvc linq search


    【解决方案1】:

    为您的 Hash-tags 创建一个单独的表,并为您的其他表创建多个外键。

    所以想象一下……

    Table > Hashtag
            Col > HashtagId
            Col > Tag
            Col > ThreadId
            Col > CommentId
    

    等等……

    如果您将外键设为可选,则在使用 EF 查询数据源时,您可以使用过滤结果。

    var commentHashtags = DbSource.Hashtags.Where(tag => tag.CommentId != (int?)null);
    

    只要 CommentId 不为空,其他列就会为空,当然,除非您在一行中填充多个外键列。

    【讨论】:

    • 但是如果我需要将标签应用于多个相同类型的对象呢?
    • 使用了这个实现的一个变体。谢谢!
    猜你喜欢
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2023-04-03
    • 2020-06-10
    相关资源
    最近更新 更多