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


PHP/MySQL - Using json encoded data instead of multiple columns in database

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

示例:如果我有一个"用户"表,一些列通常是:id、全名、用户名、电子邮件、密码等。

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

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

然后将它插入到一个带有"data"列的表中,该列将包含json编码的数组。

稍后在脚本中,我可以检索"data"列并使用json_decode($stuff_from_db, true)

如果这是一个愚蠢的问题,我很抱歉,我对mysql和它的扩展方式等不是很了解。但我想知道这是个好主意还是坏主意。

感谢

不,这不是一个好主意,这会使关系脱离RDBMS。如果不首先解析每一行的结果,就无法快速查询表中的任何内容。在小规模上,这是可以的,但如果MySQL是您存储数据的理想数据库,那么它就不是可以使用的数据库。

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

获取名为"John"的用户数量

您可以这样做,但这将是非常糟糕的设计,因为您的数据不再是原子数据。这不利于搜索,因为表需要扫描。。。

是的,这是个坏主意。使用这样的数据库确实效率很低,比如查询WHEREJOIN查询,这样做可能是不可能的。

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

有一点是,当你只需要一些特定的东西,比如要显示的全名时,你必须选择关于用户的所有信息,这也是低效的。

对于某些类型的数据,它可能会起作用。但就你举的例子而言,这不是一个好主意。如果将其存储为json或序列化值,则无法进行搜索。

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

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

你可以声称通配符搜索是可能的。但我不会这么做。

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