我想知道使用某种序列化的数据(无论是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"的用户数量
您可以这样做,但这将是非常糟糕的设计,因为您的数据不再是原子数据。这不利于搜索,因为表需要扫描。。。
WHERE
或JOIN
查询,这样做可能是不可能的。
此外,如果您愿意创建一个API,从JSON编码的数据库中获取一些信息,则需要更多的代码行才能将JSON编码的数据转换为类似XML的数据。
有一点是,当你只需要一些特定的东西,比如要显示的全名时,你必须选择关于用户的所有信息,这也是低效的。
对于某些类型的数据,它可能会起作用。但就你举的例子而言,这不是一个好主意。如果将其存储为json或序列化值,则无法进行搜索。
您将如何正确执行以下查询
Select * from <table_name> where user_name="<user_name>"
你可以声称通配符搜索是可能的。但我不会这么做。
我还认为,如果你有正确的场景,你应该存储json,而不是序列化的值。如果您存储序列化的值,那么其他系统(如果存在)将无法与该值交互,因为它们是用不同的语言编写的。