只是将 XML/JSON 存储在数据库中,用于数据库中未使用的数据


Just storing XML/JSON in a DB for data not used within the DB?

我有一个小数据库,里面有一些基本的用户数据(uid,用户名,电子邮件,密码等),被各种SQL查询和PHP使用,所以有一个完整的表结构是有意义的。

但是,新功能将添加一些新表,其中每个用户将"拥有"这些表中的行数(例如每个用户 100KB 的数据)。但是,从DB的角度来看,我真正希望能够做的是为一个用户设置所有数据,或者为一个用户获取所有数据。

然后,数据将仅使用JavaScript在客户端进行查看和编辑。当然,JavaScript 不能直接运行 SQL 查询,并且在数据被编辑并作为 HTTP POST 提交后,试图通过跟踪用户所做的任何更改来将 PHP 中正确的 UPDATE、INSERT 和 DELETE 查询集放在一起会话有点复杂。

相反,我的想法是在每个用户的数据库中都有一个TEXT字段,并在其中存储JSON或XML。然后,JavaScript可以填充HTML表,并且在用户完成该表的编辑后,JavaScript只需要从HTML表单收集所有数据并发布它。然后,PHP 只需要运行一个 SQL 查询来覆盖现有数据。

虽然这似乎是最简单的方法,但它似乎确实有点滥用 SQL DB。我还想知道,在第一种情况下,如果初始编辑前表是由 PHP 生成的,而不是文档加载后的 JS,是否会更好?

使用文本字段存储类似情况的数据是一种常见的做法。但是,如果您决定执行该移动,请考虑以下问题:

  • 坚持固定格式。如果以纯文本形式存储数据,请注意数据库将不再使用其机制来确保数据完整性和格式统一。因此,如果您有一些给定格式的记录,然后更改它并使用新格式添加更多记录,则使用旧格式的记录将不再有效,除非您确保同时支持这两种格式。因此,您的数据格式应该足够成熟且一致。
  • 估计数据长度。您应该很清楚数据文本的长度,以确保它适合您存储它的数据库列。某些数据库存在无限数据类型列(如TEXT)的问题,因此您应该非常了解数据库服务器以及部署配置。通常MySQL和PostgreSQL不会有问题,但根据我的经验,我在Informix上遇到了严重的问题 - 所以你的数据库服务器很重要。
  • 不要依赖客户端代码。你提到通过javascript创建数据。我建议至少将 JSON 提交到服务器,并从中生成另一个 JSON 以存储在数据库中,或者以其他方式对其进行验证。否则,如果您在添加自由格式客户端数据时不采取措施,黑客可能会添加恶意内容、执行数据库注入或以其他方式危害您的应用程序。但是,如果数据完全在服务器上生成,则风险较小。

因此,一般来说,就数据库开发而言,这不是一个坏做法,但如您所见,提供了额外的注意事项。如果你把它们都弄清楚了(我不会假装把所有的东西都包括在我名单中,只是我个人遇到的最常见的),那么你就会没事的。