Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在SQL中存储标记、类别和int[]的最佳方法_Php_Mysql_Sql Server_Optimization_Database Schema - Fatal编程技术网

Php 在SQL中存储标记、类别和int[]的最佳方法

Php 在SQL中存储标记、类别和int[]的最佳方法,php,mysql,sql-server,optimization,database-schema,Php,Mysql,Sql Server,Optimization,Database Schema,我只是在整理我网站上的博客帖子表 我知道如何使用SQL,对不同的类型和长度也有一些了解,但我不知道我的表的最佳长度和类型 我目前的设置方式是: id-BIGINT 20 作者身份证-BIGINT 20 标题-文本 标签-VARCHAR50 类别-VARCHAR 50 项目-VARCHAR 50 标签是帖子标签的字符串数组,与类别相同。项目将是一个int数组,int是与post关联的项目的id。每个项目都有自己的页面,当你进入该页面时,你可以得到一个关于它的所有帖子的列表 我的问题是,我能设置这个

我只是在整理我网站上的博客帖子表

我知道如何使用SQL,对不同的类型和长度也有一些了解,但我不知道我的表的最佳长度和类型

我目前的设置方式是:

id-BIGINT 20 作者身份证-BIGINT 20 标题-文本 标签-VARCHAR50 类别-VARCHAR 50 项目-VARCHAR 50 标签是帖子标签的字符串数组,与类别相同。项目将是一个int数组,int是与post关联的项目的id。每个项目都有自己的页面,当你进入该页面时,你可以得到一个关于它的所有帖子的列表

我的问题是,我能设置这个表的最佳方式是什么

更新:


目前,我对存储和优化磁盘使用的最佳方法很感兴趣。现在我有一个免费的主机服务器,它有512mb的限制。如果有必要,我可以在以后购买一台更大的服务器,但我想继续使用免费的服务器,直到我达到极限。

在PHP中,您可以使用一个名为serialize的函数,我一直在SQL存储中使用该函数

$foo = serialize($bar);
现在只需存储$foo$酒吧甚至可以是完整的对象。在事实发生后,你可以抓住价值,然后

$bar = unserialize($foo);
$bar现在包含您以前想要的任何内容。数组、对象等。这使得sql表的布局变得懒惰,但由于开始和结束结果只是php脚本中的变量,因此表并不重要。只要让字段文本不是varcharmax,你就是肉汁


对于严格的空间保护要求:

压缩客户端中的标题并存储在BLOB中。 将标签等放入commalist中,并使用FIND_in_SET检查标签是否包含特定的标签。这将很慢,并且不能使用任何索引。 使用MyISAM的磁盘占用空间要小2-3倍。 最小化索引。 使用TINYINT/SMALLINT/MEDIUMINT代替INT或BIGINT。 使用未签名的 如果不需要utf8,请使用拉丁文1;在任何不需要utf8的情况下使用拉丁语1,例如zipcode。 0.5GB是微不足道的;检查其他服务。
我更愿意将它与查询一起整齐地存储在我的数据库中。虽然这样做很酷,但我可能会在某个时候使用它:有最优化的,也有适当的。正确的方法不是把所有的东西都塞进一张桌子里。Google多对多关系,这是关系数据库的绝对基础。标记和分类应该有自己的表,然后一个表将post表连接到每个表,为什么不规范标记和项目?以数组的形式显示它们是一个UI问题,而不是数据问题。通过在字段中存储为固定数组,修改和搜索变得更加困难。我目前不确定处理标签和类别等内容的最佳方法。我一直很难找到我需要的关于如何最好地管理这些东西的信息。目前我仍在开发这个框架,因此它可以进行任何更改/改进。斯金特假设你预计地球上一半的人口将参与。我佩服你的雄心壮志!但说真的,请看规范化。我应该强调的是,我提出的大多数建议都是不好的做法。我提出它只是因为空间保护似乎是最重要的。