【问题标题】:Best Practices in setting up a Blog data model建立博客数据模型的最佳实践
【发布时间】:2009-05-06 20:29:57
【问题描述】:

我的博客数据模型有以下设置:

博客文章类别 ----- -------- 1 ---------- ID \ 1 * ID /----- ID 名称 \------------ 博客 ID / 名称 业主姓名 * / 类别 ID-/

我担心此数据模型如何与博客的“最佳实践”相匹配。如果博客被删除,是否应该删除该博客的所有文章?如果一个类别被删除,文章应该怎么办?

有没有更好的方法?有什么我想念的吗? “最佳实践”建议做什么?

【问题讨论】:

    标签: c# asp.net sql blogs


    【解决方案1】:

    这实际上取决于您的用例。许多博客应用程序使用具有多对多关系的标签而不是具有一对多关系的类别,因为将文章视为与(可能)许多标签相关比将文章视为“包含在一个类别中。

    如果您博客的逻辑是一篇文章严格包含在一个类别中,那么一对多的关系是合理的。在某些情况下,级联删除也是合理的。毕竟,孤立的文章甚至会存在于哪里。

    这只是您必须预测用户群直觉的情况。 他们会认为什么是自然的。

    顺便说一句,它还有很多工作,但如果是我,我不会做级联删除。我会将文章标记为孤立的并将它们隐藏在大多数视图中。我还将提供一些用于恢复孤立文章的界面。而且我会考虑提供一个脚本来删除任何被孤立超过一段时间的东西。这样,如果您对用户期望发生的事情有误,您可以解决问题。

    【讨论】:

    • 伙计,这正是我想要的,我想在 stackoverflow 中拥有像这里这样的标签系统,并且让文章成为孤儿是很好的建议,所以我应该设置与类别的多对多关系吗?跨度>
    • 我会推荐。它使大多数博客更易于搜索/导航。当然,如果您需要保证所有文章至少有一个类别(或标签),您需要考虑该逻辑将走向何方。 (具有一对多关系的非空值很容易在数据库级别强制执行......但是有多种方法可以强制多对多关系在一侧永远不会为空。)跨度>
    • 非常感谢,我应该在用户插入文章并强制他添加至少一个标签或类别时实现至少一个标签或类别的逻辑。你知道堆栈溢出标记系统究竟是如何工作的吗?
    • 对于“孤立”文章,只需用“孤立标签”标记“没有标签”的文章。然后,如果文章曾经被标记,请删除孤立标记。利用标签系统进行自身维护。
    • 你是个好帮手,非常感谢你帮我解决这个问题 :)
    【解决方案2】:

    (older) post 介绍了一些与标签相关的数据库架构变体,包括详细讨论。也许这是一个很好的起点。

    【讨论】:

    • 老问题,但这是一个断开的链接。
    【解决方案3】:

    视情况而定。如果您的博客引擎不允许没有指定类别的条目,您可能应该通知用户后果并删除文章。否则,您可以改用ON DELETE SET NULL

    【讨论】:

      【解决方案4】:

      如果您的关系设置正确,您应该无法在不先删除所有相关数据的情况下删除该类别。删除一个类别会删除一堆文章似乎很奇怪,但同时,如果一个类别不再有效,那么文章也不应该是。

      也许可以选择将所有文章重新映射到新类别。

      【讨论】:

        【解决方案5】:

        几个问题。一篇文章可以有多个类别吗?您是否允许文章有 0 个与之关联的类别?不过,根据您的描述,我想说您不想删除这些文章。根据我在开发博客时的经验,这些类别通常与文章/帖子(描述多个帖子的多个类别)是多对多的关系。所以我不会删除它们,但这再次取决于您的业务逻辑以及您希望如何处理它。

        【讨论】:

          【解决方案6】:

          好吧,将您的博客类别与您的博客文章相关联的外键(应该存在)不允许您这样做。如果您想保持文章和参考完整性,您应该考虑将文章的类别更改为其他类别。

          【讨论】:

            【解决方案7】:

            忘掉数据模型,用对象模型,数据就是实现,对象就是接口,更贴近需求。

            【讨论】:

            • 我用的是Linq2Sql,你是这个意思吗?
            猜你喜欢
            • 2011-10-29
            • 2012-01-17
            • 2011-03-13
            • 2019-10-28
            • 2014-10-03
            • 2015-04-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多