我将有一个拥有数百万个表的网站(带有数据的文字HTML表),所以我需要存储它.我正在努力解决每个表行是否应该作为单独的记录存储在数据库中的问题,或者我是否应该将整个表存储为JSON编码数据(或类似格式).
我质疑这一点的原因是我希望允许用户访问每个HTML表格中的更改数据,并且我希望他们能够仅在一个表格单元格中更改数据,而无需通过编辑整张桌子.
看起来如果我将整个表存储为一个值,只更改一个单元格可能会很麻烦,因为我可能只需要每次替换整个表值而不是进行搜索和替换.但是,如果我将每个表行存储为记录,我将有数十亿条记录可能会快速失控,因为我希望将旧版本保存在存储中(在另一个数据库表中).
如果我将每一行存储为单独的记录,它也必须是超级密码关系,因为HTML表格将包含标题,子标题等.
我做了一些计算,这些是粗略的数字:
〜912个企业总数〜美国平均地点800个〜总表729,600个〜表总排量7200万个
以下是从UI角度看表的工作方式,以便您了解如何处理和操作数据.

不要将 HTML 存储在数据库中——只存储原始数据,这就是数据库的用途。然后,您可以使用 PHP 动态设置其格式,无论是网页上的 HTML 表、用于 API 查询的 JSON 编码字符串、高级报告还是 CSV 文件导出。您需要一张适合企业使用的桌子:
CREATE TABLE business (
id UNSIGNED INT NOT NULL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address ...
city ...
);
Run Code Online (Sandbox Code Playgroud)
其中一个用于企业地点:
CRATE TABLE location (
id UNSIGNED INT NOT NULL PRIMARY KEY,
business_id UNSIGNED INT NOT NULL REFERENCES business(id),
name VARCHAR(255) NOT NULL,
description ...
KEY (business_id)
);
Run Code Online (Sandbox Code Playgroud)
还有一个用于某个位置的项目:
CREATE TABLE item (
id UNSIGNED INT NOT NULL PRIMARY KEY,
location_id UNSIGNED INT NOT NULL REFERENCES location(id),
type VARCHAR(255),
name VARCHAR(255),
size VARCHAR(255),
discount UNSIGNED INT,
KEY (location_id)
);
Run Code Online (Sandbox Code Playgroud)
您可能希望根据您的要求调整索引和键唯一性。我想您会需要 (location.business_id + location.name) 和 (item.location_id + item.name) 上的唯一键。