Php 在MySQL数据库中存储JSON数组数据可以吗?

Php 在MySQL数据库中存储JSON数组数据可以吗?,php,mysql,database,database-design,Php,Mysql,Database,Database Design,我有一个独特的情况。我的网站的用户可以提交文章供其他用户审阅,但他们可以按年龄和国家限制谁可以审阅文章。我的问题是,我认为将所有250个国家(或他们希望其他用户可见的任何国家)以JSON格式存储在数据库中的文本字段中是合适的,而不是有250条记录(每个国家链接到文章)。这样我就只需要一个记录每篇文章。我不确定演出是否会受到严重影响?该网站将处理100-200万用户,提交审查的文章数量也将相当大。唯一要做的“处理”是将每个用户的国家/地区存储在数据库中,并根据文章的国家/地区数组进行检查,以查看是

我有一个独特的情况。我的网站的用户可以提交文章供其他用户审阅,但他们可以按年龄和国家限制谁可以审阅文章。我的问题是,我认为将所有250个国家(或他们希望其他用户可见的任何国家)以JSON格式存储在数据库中的文本字段中是合适的,而不是有250条记录(每个国家链接到文章)。这样我就只需要一个记录每篇文章。我不确定演出是否会受到严重影响?该网站将处理100-200万用户,提交审查的文章数量也将相当大。唯一要做的“处理”是将每个用户的国家/地区存储在数据库中,并根据文章的国家/地区数组进行检查,以查看是否允许该用户查看该文章


你们觉得怎么样?我是否认为每篇文章有250条记录太多了

简言之,如果您不打算基于该列查询数据,那么在关系数据库的列中存储Json数据就可以了

如果您需要根据该列查找数据,那么在排除数据之前必须解析json会对性能造成巨大的影响,因此这将是一个“否”


在我的工作中,我们在较小的范围内遇到了这个问题,在数据库中存储属性的json非常有效,不会增加数据库中未搜索属性的复杂性。

一个选项可能是使用位字段表示您的国家,使用MySQL或类型。这将允许您将每个控件的信息存储在单个位中,每个记录只需要额外的32个字节(8位/字节*32字节=256位)


我不确定,但甚至可以使用位运算进行查询,这可能非常快。

我将使用另一个表来代替该数据,并创建一个唯一的列来匹配它。

您有一个“国家”表和一个“文章”表。我将制作第三篇“国家文章”,只包含应该匹配的索引。毕竟Mysql是关系型的。
如果您担心性能,请进行基准测试。

我认为将数据存储在查找表中是完全可以接受的。如果将来有什么变化,它会给你更多的自由,只要你很好地索引表,性能就不会太高

Mysql可以轻松处理数十亿条记录的数据。是的,您将需要确保您的数据完整性,但是向查找表中添加一列与更改存储在每个记录中的对象相比,突然看起来要容易得多


只需确保您正确地保存了数据,因为您没有重复不必重复的信息。将国家/地区保存在一个表中,并在引用该国家/地区的查找表中保留一个简单ID。

您可以为国家/地区创建一个单独的表,并将其ID存储在文章表中


您可以在国家/地区表中存储所有国家/地区、亚洲、欧洲、北美、南美等的选项。

JSON将阻止DBMS检查您希望存储的国家/地区的有效性。它基本上是一个不透明的文本,因此DBMS不能强制引用完整性(外键)

即使您不需要查询国家(这是一个相当大的if),您至少需要在检查特定国家之前解析JSON

JSON可以很好地匹配分层数据,但这只是一个简单的集合(一个国家或地区是集合中的一个元素或不是),可以用一个单独的连接表ARTICLE_country很好地表示,然后可以高效地维护和搜索:


此连接表仅链接到可访问文章的国家。如果大多数文章都可以从大多数国家访问,你甚至可以颠倒连接表的含义,只存储“禁止”的国家,从而降低总行数。

要存储256位,你需要32字节。真不敢相信我犯了这个错误。我比我想象的要累。