2

我有一个小型数据库,其中包含一些基本的用户数据(uid、用户名、电子邮件、密码等),供各种 SQL 查询和 PHP 使用,因此在那里拥有完整的表结构是有意义的。

然而,一项新功能将添加一些新表,其中每个用户将“拥有”这些表中的许多行(例如每个用户 100KB 的数据)。但是从数据库的角度来看,我真正想做的就是为一个用户设置所有数据,或者为一个用户获取所有数据。

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

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

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

4

1 回答 1

1

使用文本字段来存储像您这样的案例的数据是一种常见的做法。但是,如果您决定这样做,请考虑以下问题:

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

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

于 2013-10-31T13:27:16.620 回答