我想知道是否使用某种序列化数据,无论是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及其如何扩展等方面的了解并不是很了解。但我想知道这是不是一个好主意。
由于
答案 0 :(得分:1)
不,这不是一个好主意,而且会从RDBMS中取出 Relational 。如果不先解析每行的结果,您将无法快速查询表中的任何内容。在一个小规模上,这是可以的,但如果这是您在存储数据时的想法,那么MySQL就不会是使用的数据库。
想象一下,如果使用序列化或使用JSON编码存储它,请尝试从数据库中获取以下内容:
获取名为“John”的用户数
答案 1 :(得分:1)
你可以做到这一点,但那将是非常糟糕的设计,因为你的数据不再是原子的。这对搜索不利,因为需要扫描表...
答案 2 :(得分:1)
是的,这是一个坏主意。使用这样的数据库效率非常低,例如查询WHERE
或JOIN
查询,可能不可能这样做。
此外,如果您愿意创建一个从JSON编码数据库中获取某些信息的API,则需要更多行代码才能将JSON编码数据转换为XML。
一件小事,当你需要特定的东西时,你必须选择有关用户的所有信息,比如要显示的全名,这又是低效的。
答案 3 :(得分:0)
对于某些类型的数据,它可能有用。但是对于你给出它的例子并不是一个很好的主意。如果您将其存储为json或序列化值,那么您将无法搜索。
您将如何正确执行以下查询
Select * from <table_name> where user_name="<user_name>"
您可以声称可以进行外卡搜索。但我不会这样做。
我还认为如果你有正确的场景,你应该存储json而不是序列化的值。如果存储序列化值,那么如果它们存在,则其他系统将无法与此值交互,因为它们是用不同的语言编写的。