PHP / MySQL - 在数据库中使用json编码数据而不是多列

时间:2012-07-20 02:00:31

标签: php mysql database json

我想知道是否使用某种序列化数据,无论是json编码还是序列化等,都比在mysql数据库中使用多列更好。

实施例: 如果我有一个“用户”表,一些列通常是:id,fullname,username,email,password等。

但是,如果我使用json数据而不是拥有所有这些列,该怎么办?我可以在我的数据库表(id,data)中只使用2列。所以我可以在php中做这样的事情:

json_encode(array('username' => $_POST['username'], 'password' => md5($_POST['password'])));

然后将其插入带有“data”列的表中,该列将保存json编码数组。

稍后在脚本中,我可以检索“数据”列并使用json_decode($stuff_from_db, true)

如果这是一个愚蠢的问题我很抱歉,我对mysql及其如何扩展等方面的了解并不是很了解。但我想知道这是不是一个好主意。

由于

4 个答案:

答案 0 :(得分:1)

不,这不是一个好主意,而且会从RDBMS中取出 Relational 。如果不先解析每行的结果,您将无法快速查询表中的任何内容。在一个小规模上,这是可以的,但如果这是您在存储数据时的想法,那么MySQL就不会是使用的数据库。

想象一下,如果使用序列化或使用JSON编码存储它,请尝试从数据库中获取以下内容:

  

获取名为“John”的用户数

答案 1 :(得分:1)

你可以做到这一点,但那将是非常糟糕的设计,因为你的数据不再是原子的。这对搜索不利,因为需要扫描表...

答案 2 :(得分:1)

是的,这是一个坏主意。使用这样的数据库效率非常低,例如查询WHEREJOIN查询,可能不可能这样做

此外,如果您愿意创建一个从JSON编码数据库中获取某些信息的API,则需要更多行代码才能将JSON编码数据转换为XML。

一件小事,当你需要特定的东西时,你必须选择有关用户的所有信息,比如要显示的全名,这又是低效的。

答案 3 :(得分:0)

对于某些类型的数据,它可能有用。但是对于你给出它的例子并不是一个很好的主意。如果您将其存储为json或序列化值,那么您将无法搜索。

您将如何正确执行以下查询

Select * from <table_name> where user_name="<user_name>"

您可以声称可以进行外卡搜索。但我不会这样做。

我还认为如果你有正确的场景,你应该存储json而不是序列化的值。如果存储序列化值,那么如果它们存在,则其他系统将无法与此值交互,因为它们是用不同的语言编写的。