如何设置将存储表格数据的数据库表?

时间:2015-07-11 15:51:52

标签: php mysql

我将拥有一个拥有数百万个表格的网站(带有数据的文字HTML表格),所以我需要存储它。我正在讨论是否应将每个表行存储为数据库中的单独记录,或者是否应将整个表存储为JSON编码数据(或类似格式)。

我质疑这一点的原因是我希望允许用户访问每个HTML表格中的更改数据,并且我希望他们能够仅在一个表格单元格中更改数据,而不必去通过编辑整个表格。

似乎如果我将整个表存储为一个值,只更改一个单元格可能会很麻烦,因为我可能只需要每次替换整个表值而不是进行搜索和替换。但是,如果我将每个表行存储为一个记录,我将有数十亿条记录可能会快速失控,因为我希望将旧版本保存在存储中(在另一个数据库表中)。

如果我将每一行存储为单独的记录,它也必须是超级密码关系,因为HTML表格将包含标题,子标题等。

我做了一些计算,这些都是粗略的数字:

~912总业务 在美国平均约800个地点 总表约729,600 总表约为7200万行

以下是从UI角度看表的工作方式,以便您了解如何处理和操作数据。

table description

3 个答案:

答案 0 :(得分:3)

不要将HTML存储在数据库中 - 只需存储原始数据,即数据库的用途。然后,您可以随意使用PHP格式化它,无论是您在网页上的HTML表格,用于API查询的JSON编码字符串,高级报告还是CSV文件导出。您需要一张适合企业的桌子:

CREATE TABLE business (
    id UNSIGNED INT NOT NULL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    address ...
    city ...
);

一个适用于企业的位置:

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)
);

一个位置项目:

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)
);

您可能希望根据您的要求调整索引和密钥唯一性。我想你会想要一个唯一的密钥(location.business_id + location.name)和(item.location_id + item.name)。

答案 1 :(得分:0)

在您的情况下,您可以查看像MongoDB这样的NoSQL解决方案,并将您的表存储为集合中的项目。 MongoDB应该能够有效地处理以JSON格式存储的表

对于SQL选项,答案取决于表的大小 - 如果表很大,那么以JSON格式存储整个表在恢复和更新表数据方面不会很好。如果表很小,那么它是一个可行的选择。

答案 2 :(得分:-1)

您可以将PHP与mysql_connectmysql_select_dbmysql_querymysql_fetch_row一起使用。

在CSS端,您可以设置以下内容:

table.db-table      
table.db-table th   
table.db-table td   

然后,一旦这些表由PHP代码绘制,您可以设计更多.CSS以在列下的单元格内执行内联编辑。你需要JavaScript或者使用jQuery Framework。

如上所述,您也可以使用PHP的PDO代替mysql

$dbh = new PDO("sybase:host=$host;dbname=$dbname, $user, $pass");
$q = $dbh->prepare("DESCRIBE tablename");
$q->execute();
$table_fields = $q->fetchAll(PDO::FETCH_COLUMN); 

您需要jQuery来编辑单个表格单元格,或者让您的用户能够即时执行此操作。您可能需要查看jqGrid插件。

编辑:要回答有关数据库及其所有表的设置的问题,我将尝试:嗯,您可以使用真正的MySQL表。如果您在获取数据时知道列名称,则可以简单地组成一个合适的表名(顺便说一下,确保自己制作这些名称),创建具有必要名称的表。

如果您需要,可以使用show_column查询向数据库询问表的架构。