【问题标题】:Will this Post/Tag DB schema cause problems later?这个 Post/Tag DB 模式会在以后引起问题吗?
【发布时间】:2011-03-15 03:40:39
【问题描述】:

我正在为我的 ASP.NET MVC 应用程序计划一项新服务并希望使用标签。我从来没有真正喜欢过标签,但 SO 提供,所以我会试一试。

这是我正在考虑的简化架构:

Post Table
------------------
PK PostId BigInt (or perhaps uniqueidentifier)
...more post related fields...
Tags nvarchar(200)

然后我会 LINQ 查询类似:

_db.Posts.Where(p => p.Tags.Contains("TagToFind"));

显然,这非常简单,但可以满足我的需要。你觉得这有什么明显的问题吗?可能的性能,我想 .Contains() 并不是很快。

更新 我计划预先构建一组允许的标签供用户选择。

【问题讨论】:

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


    【解决方案1】:

    这可能有效,但除非您在该列上有全文索引(并且您使用全文样式查询对其进行查询),否则它不会扩展。

    同样规范化标签(有一个标签表)是一种关键,除非你这样做你不能处理合并或跟踪何时/谁创建了什么标签。

    【讨论】:

    • 我更新了我的问题。我将有一个预先构建的允许标签数组。至于全文样式查询,在 LINQ 中会是什么样子? Tag 字段有什么特别需要做的吗?
    【解决方案2】:

    您是否发现任何明显的问题 这个?

    好吧,我们来测试一下:

    INSERT INTO PostTable (PostId, Tags) 
    VALUES (0, NULL), 
           (1, NULL), 
           (2, NULL), 
           (22, ''), 
           (55, 'Hello world!'), 
           (-99, 'Hello world!');
    

    没有关系键,没有数据完整性。不,绝对没有问题;)

    【讨论】:

    • 虽然我很欣赏这里和那里的一些讽刺......我不确定我是否遵循你的意思......标签在业务层上控制(一系列批准的标签用户可以选择)。如果你的意思是我以后不能在没有繁重的数据库查询/更新的情况下更改标签文本......我可以忍受。
    【解决方案3】:

    您的查询将无法使用索引。因此,更多帖子 => 性能更差。

    【讨论】:

    • 我所期望的。将来可能我必须实现全文索引并构建存储过程来查询它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    相关资源
    最近更新 更多