代码之家  ›  专栏  ›  技术社区  ›  Stephano

在数据库中有属性表是个坏主意吗?

  •  7
  • Stephano  · 技术社区  · 16 年前

    通常,当我需要存储系统属性(如管理信息、版本等)时,我使用一个平面文件(database.properties、init.properties等)。这在我每天看到和使用的其他程序中似乎很常见。

    有时平面文件不太理想,原因有很多。将Web应用程序部署到许多客户机通常都有局限性。在这些情况下,我使用数据库表来保存信息。例如,假设我有一些想要保存的管理数据,也许还有一些关于我的环境的细节。我可能会这样做:

    属性_entry_table

    [id, scope, refId, propertyName, propertyValue, propertyType] 
    1, 0, 1, "DB_VER", "2.3.0", "FLOAT"  
    2, 0, 1, "LICENCE", "88475", "INT"  
    3, 0, 1, "TOP_PROJECT", "1", "INT"   
    4, 0, 1, "SHOW_WELCOME", "F", "BOOL"  
    5, 0, 1, "SMTP_AUTH", "SSH", "STRING"  
    6, 1, 1, "ADMIN_ALERTS", "T", "BOOL"
    

    我意识到这会破坏SQL的输入,并允许我将所有类型存储为字符串。这是一个好的做法,还是我一直这样做是错误的?

    如果没有,我应该以什么方式存储这种类型的信息?

    3 回复  |  直到 16 年前
        1
  •  1
  •   newdayrising    16 年前

    我使用了类似的结构来存储属性数据,我认为只要表保持相对较小,就可以了。实体属性值( EAV )类似这样的表可能比传统的列结构表消耗更多的空间并显示较慢的查询性能,但对于一组大小合理的应用程序属性来说,这不应该是一个问题。

        2
  •  2
  •   Middletone    16 年前

    我认为这很好,但是当您读取数据时,您可能会考虑将数据缓存到内存中,这样就不必一直返回到数据库。如果您缓存您的数据,然后将其存储在任何地方,这将使您的更新变得最简单。将数据存储在数据库中的好处是,维护或创建接口来管理这些属性可能更容易,尤其是当您开始为应用程序使用分布式环境时。

        3
  •  0
  •   martinr    16 年前

    对于很少访问的少量数据,这是可以接受的。

    实际上,对于查看模式的用户来说,最好不要查看单个应用程序属性。

    这减少了模式更新的问题。(经常添加/删除应用程序属性。)

    它不适合的是大量的数据或频繁访问的数据,因为在这里每次检索数据库要做的工作要比传统模式多得多,占用的空间也要大得多。