Php MySQL中的连接表与JSON数据

Php MySQL中的连接表与JSON数据,php,mysql,json,laravel,eloquent,Php,Mysql,Json,Laravel,Eloquent,我想知道哪种方法是处理数据中关系的最佳方法 My person表当前存储以下多个实例的“name”和“url”(为简单起见更改了列名): 喜爱的书 喜爱的网站 最受欢迎的商店 最喜欢的地方 因此,对于上述每一项,我在person表中都有一列包含JSON字符串。例如,对于一个人,我可能在“最喜爱的商店”列中有以下内容: [{"name":"john lewis", "url":"http://www.johnlewis.com"},{"name":"tesco", "url":"http://ww

我想知道哪种方法是处理数据中关系的最佳方法

My person表当前存储以下多个实例的“name”和“url”(为简单起见更改了列名):

  • 喜爱的书
  • 喜爱的网站
  • 最受欢迎的商店
  • 最喜欢的地方
  • 因此,对于上述每一项,我在person表中都有一列包含JSON字符串。例如,对于一个人,我可能在“最喜爱的商店”列中有以下内容:

    [{"name":"john lewis", "url":"http://www.johnlewis.com"},{"name":"tesco", "url":"http://www.tesco.co.uk"}]
    
    “最喜爱的网站”栏中有以下内容

    [{"name":"bbc", "url":"http://www.bbc.co.uk"},{"name":"the guardian", "url":"http://www.guardian.co.uk"}]
    
    显然,这些JSON字符串可以包含更多的项,这在其他两列中重复——“最喜欢的书”和“最喜欢的地方”

    因此,对数据库的一次查询可以返回我需要的所有数据。但我必须在AngularJS中循环JSON,以便在前端显示

    我的问题是,使用4个联接表而不是上面列出的列是否有益(特别是由于需要前端处理)

    或者可能是一个单独的jointable(因为4共享相同的属性、名称和url),其中有一个额外的列指示行引用的是4中的哪一个

    补充事项:

  • 我使用的是Laravel 5.2和雄辩的
  • 我不太可能需要同时显示所有“人员”及其相关数据,视图将一次显示一个人
  • 我也不太可能需要查询特定的商品,比如“最受欢迎的商店”名为“约翰·刘易斯”——这些数据是对个人的补充
  • person和4个选项之间的关系是一对多-person不需要共享数据,任何匹配的条目都只是额外的行。我使用的实际列不太可能需要在人员之间共享数据
  • 我将上述内容构建为RESTful api,因此所有数据都将采用json_编码

  • 我知道这并不能真正回答你的问题,但你看了吗?我也曾在Symfony2 framework()中使用过同样的方法,在数据库中存储任何形式的序列化数据都会让我如坐针毡。。。即使是以相对可移植的形式,比如JSON。所以,就个人而言,我会根据需要使用尽可能多的链接表,以使数据库尽可能接近3NF。这样一来,即使您从头开始完全重写了应用程序,数据本身仍然是有用的和可移植的。这些列中的每一列都应该是链接到该人员的表。使用联接表查询与前端解析可能是非常大的json字符串相比将是有益的。您还可以从不必首先创建json中获益。对任何给定“收藏夹”的更新和删除也将大大简化。感谢这两个方面,出于兴趣,如果我需要循环“person”条目及其关联的联合表数据,您是否也会这么说?这将是一个地狱般的数据库查询循环!Laravel可以帮你处理这件事,这叫做“急切加载”。这将是对所有人的查询,然后是对您希望加入的每个项目的查询。因此,如果您有书籍、网站、商店和场所,您将查看5个查询,Laravel会为您正确地嵌套它们。