0

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

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

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

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

然后将其插入到包含“数据”列的表中,该列将保存 json 编码数组。

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

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

谢谢

4

4 回答 4

1

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

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

获取名字为“John”的用户数

于 2012-07-20T02:09:40.407 回答
1

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

于 2012-07-20T02:09:49.523 回答
1

是的,这是个坏主意。使用这样的数据库确实效率低下,例如查询WHEREJOIN查询,可能无法这样做

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

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

于 2012-07-20T02:14:36.267 回答
0

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

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

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

您可以声称可以进行通配符搜索。但我不会这样做。

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

于 2012-07-20T02:10:23.660 回答