【问题标题】:Storing Templates and Object-Oriented vs Relational Databases存储模板和面向对象与关系数据库
【发布时间】:2010-12-21 19:51:01
【问题描述】:

我正在设计一些自定义博客软件,但在数据库设计方面遇到了难题。该软件要求有多种内容类型,每一种都需要不同的输入表格和演示模板。

我最初的直觉是将这些内容类型创建为对象,然后将它们序列化并将它们作为 JSON 或 YAML 存储在数据库中,并将输入表单和模板作为附加到“contentTypes”表的简单字符串。然而,这似乎很麻烦。是否有处理这种设计的最佳实践?这是我应该考虑对象数据库的用例吗?

如果我应该使用对象数据库,我应该考虑哪个?我目前正在使用 Python,希望有一个功能强大的 Python 库,但如果需要,我可以迁移到 Java。

【问题讨论】:

  • 主要作为练习。这是一个个人项目,我想从头开始理解它。像 Django 这样的全栈框架使这成为一个挑战。如果我需要将它交付给客户,我当然会选择 Django 之类的东西。

标签: python database-design relational-database object-oriented-database


【解决方案1】:

请不要将模板(可能由用户更改)存储在数据库中。如果您必须处理数据库转储的问题,那么从登台环境迁移到生产环境就没有明智的方法。出于这个原因,我们正在倾销一些软件。

除此之外,我只需将源(用户可编辑部分)存储在数据库中,外加一个“预编译版本”,或者直接存储在数据库中(以便更快地检索)或存储在某些缓存系统中。

我个人会采用集合论方法。

  • 存储每组预编译的内容类型,并在编辑时重新编译以在单独的位置(表、集合、目录等)快速提供服务
  • 将源存储在一个公共位置,以便于重新构建不同的内容类型(源格式实际上只是一种特殊情况的内容类型)
  • 将模板保存在系统(dev、staging、prod)之间迁移方便迁移的地方

【讨论】:

  • 注意:如果您只通过主键检索 nosql 与 SQL 并没有太大区别。因此,对于学习来说,使用你所知道的任何东西——如果这应该是你学习经历的一部分。否则,坚持你所知道的。在众所周知的环境中修复错误要比在新环境中容易得多。
  • -1 对我自己忽略了“演示与数据”的区别。 +1 给你指出来。我没有直接使用代表单个内容项的预编译“sn-ps”;我的大部分网络应用程序经验都是在低需求情况下直接处理数据库,而不是面向网络的情况。
【解决方案2】:

我是 Oracle 的大力支持者,但我认为您应该认真考虑 NoSQL。 Cassandra 和其他 NoSQL 数据库已经考虑到了您的难题并将其粉碎。 CouchDB 是另一个人,我相信他们的示例代码是如何存储博客。

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 2014-08-05
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多