Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从JSON多维数组到SQL_Mysql_Sql_Json - Fatal编程技术网

Mysql 从JSON多维数组到SQL

Mysql 从JSON多维数组到SQL,mysql,sql,json,Mysql,Sql,Json,我有这个JSON结构,需要将它传递到数据库。但是我不知道我所做的结构是否是最好的,代码中有一些重复,我不认为这是正确的,我认为这是不必要的 JSON: { "info": [ { "atriz": "Sandra Bullock", "atriz-id": "162", "atriz-slug": "sandra-bullock", "carreira": {

我有这个JSON结构,需要将它传递到数据库。但是我不知道我所做的结构是否是最好的,代码中有一些重复,我不认为这是正确的,我认为这是不必要的

JSON:

{
    "info": [
        {
            "atriz": "Sandra Bullock",
            "atriz-id": "162",
            "atriz-slug": "sandra-bullock",
            "carreira": {
                "id": "264",
                "inicio": "08/10/91",
                "final": "16/08/18",
                "videos": [
                    {
                        "id": "2930500",
                        "titulo": "Lorem ipsum habitant commodo cubilia eget blandit",
                        "desc": "Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis",
                        "code": "Sb6y1oTwd",
                        "source": "http://URL",
                        "download": true,
                        "link": "http://URL",
                        "duration": null,
                        "post_status": "pending",
                        "category": "drama",
                        "upload": {
                            "send": true,
                            "id": "118840448",
                            "url": "http://URL",
                            "status": "finished"
                        }
                    },
                    {
                        "id": "2930499",
                        "titulo": "Lorem ipsum habitant commodo cubilia eget blandit",
                        "desc": "Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis",
                        "code": "R2G0GhTwF",
                        "source": "http://URL",
                        "download": true,
                        "link": "http://URL",
                        "duration": null,
                        "post_status": "pending",
                        "category": "acao",
                        "upload": {
                            "send": true,
                            "id": "118840554",
                            "url": "http://URL",
                            "status": "finished"
                        }
                    }
                ]
            }
        },
        {
            "atriz": "Jennifer Lawrence",
            "atriz-id": "207",
            "atriz-slug": "jennifer-lawrence",
            "carreira": {
                "id": "263",
                "inicio": "02/01/88",
                "final": "09/08/18",
                "videos": [
                    {
                        "id": "2930443",
                        "titulo": "Lorem ipsum habitant commodo cubilia eget blandit",
                        "desc": "Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis",
                        "code": "DNJNYHWh",
                        "source": "http://URL",
                        "download": true,
                        "link": "http://URL",
                        "duration": null,
                        "post_status": "pending",
                        "category": "drama",
                        "upload": {
                            "send": true,
                            "id": "118844113",
                            "url": "http://URL",
                            "status": "finished"
                        }
                    },
                    {
                        "id": "2930442",
                        "titulo": "Lorem ipsum habitant commodo cubilia eget blandit",
                        "desc": "Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis",
                        "code": "OqieXJHwh",
                        "source": "http://URL",
                        "download": true,
                        "link": "http://URL",
                        "duration": null,
                        "post_status": "pending",
                        "category": "comedia",
                        "upload": {
                            "send": true,
                            "id": "118844112",
                            "url": "http://URL",
                            "status": "finished"
                        }
                    }
                ]
            }
        }
    ]
}
CREATE TABLE IF NOT EXISTS infos (
    `info_atriz` VARCHAR(17) CHARACTER SET utf8,
    `info_atriz_id` INT,
    `info_atriz_slug` VARCHAR(17) CHARACTER SET utf8,
    `info_carreira_id` INT,
    `info_carreira_inicio` DATETIME,
    `info_carreira_final` DATETIME,
    `info_carreira_videos_id` INT,
    `info_carreira_videos_titulo` VARCHAR(49) CHARACTER SET utf8,
    `info_carreira_videos_desc` VARCHAR(78) CHARACTER SET utf8,
    `info_carreira_videos_code` VARCHAR(9) CHARACTER SET utf8,
    `info_carreira_videos_source` VARCHAR(10) CHARACTER SET utf8,
    `info_carreira_videos_download` VARCHAR(4) CHARACTER SET utf8,
    `info_carreira_videos_link` VARCHAR(10) CHARACTER SET utf8,
    `info_carreira_videos_duration` INT,
    `info_carreira_videos_post_status` VARCHAR(7) CHARACTER SET utf8,
    `info_carreira_videos_category` VARCHAR(7) CHARACTER SET utf8,
    `info_carreira_videos_upload_send` VARCHAR(4) CHARACTER SET utf8,
    `info_carreira_videos_upload_id` INT,
    `info_carreira_videos_upload_url` VARCHAR(10) CHARACTER SET utf8,
    `info_carreira_videos_upload_status` VARCHAR(8) CHARACTER SET utf8
);
INSERT INTO infos VALUES
    ('Sandra Bullock',162,'sandra-bullock',264,'1991-10-08 00:00:00','2018-08-16 00:00:00',2930500,'Lorem ipsum habitant commodo cubilia eget blandit','Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis','Sb6y1oTwd','http://URL','True','http://URL',NULL,'pending','drama','True',118840448,'http://URL','finished'),
    ('Sandra Bullock',162,'sandra-bullock',264,'1991-10-08 00:00:00','2018-08-16 00:00:00',2930499,'Lorem ipsum habitant commodo cubilia eget blandit','Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis','R2G0GhTwF','http://URL','True','http://URL',NULL,'pending','acao','True',118840554,'http://URL','finished'),
    ('Jennifer Lawrence',207,'jennifer-lawrence',263,'1988-01-02 00:00:00','2018-08-09 00:00:00',2930443,'Lorem ipsum habitant commodo cubilia eget blandit','Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis','DNJNYHWh','http://URL','True','http://URL',NULL,'pending','drama','True',118844113,'http://URL','finished'),
    ('Jennifer Lawrence',207,'jennifer-lawrence',263,'1988-01-02 00:00:00','2018-08-09 00:00:00',2930442,'Lorem ipsum habitant commodo cubilia eget blandit','Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis','OqieXJHwh','http://URL','True','http://URL',NULL,'pending','comedia','True',118844112,'http://URL','finished');
我不太懂SQL,所以我使用了一个在线转换,它向我返回了以下信息:

SQL:

{
    "info": [
        {
            "atriz": "Sandra Bullock",
            "atriz-id": "162",
            "atriz-slug": "sandra-bullock",
            "carreira": {
                "id": "264",
                "inicio": "08/10/91",
                "final": "16/08/18",
                "videos": [
                    {
                        "id": "2930500",
                        "titulo": "Lorem ipsum habitant commodo cubilia eget blandit",
                        "desc": "Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis",
                        "code": "Sb6y1oTwd",
                        "source": "http://URL",
                        "download": true,
                        "link": "http://URL",
                        "duration": null,
                        "post_status": "pending",
                        "category": "drama",
                        "upload": {
                            "send": true,
                            "id": "118840448",
                            "url": "http://URL",
                            "status": "finished"
                        }
                    },
                    {
                        "id": "2930499",
                        "titulo": "Lorem ipsum habitant commodo cubilia eget blandit",
                        "desc": "Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis",
                        "code": "R2G0GhTwF",
                        "source": "http://URL",
                        "download": true,
                        "link": "http://URL",
                        "duration": null,
                        "post_status": "pending",
                        "category": "acao",
                        "upload": {
                            "send": true,
                            "id": "118840554",
                            "url": "http://URL",
                            "status": "finished"
                        }
                    }
                ]
            }
        },
        {
            "atriz": "Jennifer Lawrence",
            "atriz-id": "207",
            "atriz-slug": "jennifer-lawrence",
            "carreira": {
                "id": "263",
                "inicio": "02/01/88",
                "final": "09/08/18",
                "videos": [
                    {
                        "id": "2930443",
                        "titulo": "Lorem ipsum habitant commodo cubilia eget blandit",
                        "desc": "Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis",
                        "code": "DNJNYHWh",
                        "source": "http://URL",
                        "download": true,
                        "link": "http://URL",
                        "duration": null,
                        "post_status": "pending",
                        "category": "drama",
                        "upload": {
                            "send": true,
                            "id": "118844113",
                            "url": "http://URL",
                            "status": "finished"
                        }
                    },
                    {
                        "id": "2930442",
                        "titulo": "Lorem ipsum habitant commodo cubilia eget blandit",
                        "desc": "Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis",
                        "code": "OqieXJHwh",
                        "source": "http://URL",
                        "download": true,
                        "link": "http://URL",
                        "duration": null,
                        "post_status": "pending",
                        "category": "comedia",
                        "upload": {
                            "send": true,
                            "id": "118844112",
                            "url": "http://URL",
                            "status": "finished"
                        }
                    }
                ]
            }
        }
    ]
}
CREATE TABLE IF NOT EXISTS infos (
    `info_atriz` VARCHAR(17) CHARACTER SET utf8,
    `info_atriz_id` INT,
    `info_atriz_slug` VARCHAR(17) CHARACTER SET utf8,
    `info_carreira_id` INT,
    `info_carreira_inicio` DATETIME,
    `info_carreira_final` DATETIME,
    `info_carreira_videos_id` INT,
    `info_carreira_videos_titulo` VARCHAR(49) CHARACTER SET utf8,
    `info_carreira_videos_desc` VARCHAR(78) CHARACTER SET utf8,
    `info_carreira_videos_code` VARCHAR(9) CHARACTER SET utf8,
    `info_carreira_videos_source` VARCHAR(10) CHARACTER SET utf8,
    `info_carreira_videos_download` VARCHAR(4) CHARACTER SET utf8,
    `info_carreira_videos_link` VARCHAR(10) CHARACTER SET utf8,
    `info_carreira_videos_duration` INT,
    `info_carreira_videos_post_status` VARCHAR(7) CHARACTER SET utf8,
    `info_carreira_videos_category` VARCHAR(7) CHARACTER SET utf8,
    `info_carreira_videos_upload_send` VARCHAR(4) CHARACTER SET utf8,
    `info_carreira_videos_upload_id` INT,
    `info_carreira_videos_upload_url` VARCHAR(10) CHARACTER SET utf8,
    `info_carreira_videos_upload_status` VARCHAR(8) CHARACTER SET utf8
);
INSERT INTO infos VALUES
    ('Sandra Bullock',162,'sandra-bullock',264,'1991-10-08 00:00:00','2018-08-16 00:00:00',2930500,'Lorem ipsum habitant commodo cubilia eget blandit','Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis','Sb6y1oTwd','http://URL','True','http://URL',NULL,'pending','drama','True',118840448,'http://URL','finished'),
    ('Sandra Bullock',162,'sandra-bullock',264,'1991-10-08 00:00:00','2018-08-16 00:00:00',2930499,'Lorem ipsum habitant commodo cubilia eget blandit','Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis','R2G0GhTwF','http://URL','True','http://URL',NULL,'pending','acao','True',118840554,'http://URL','finished'),
    ('Jennifer Lawrence',207,'jennifer-lawrence',263,'1988-01-02 00:00:00','2018-08-09 00:00:00',2930443,'Lorem ipsum habitant commodo cubilia eget blandit','Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis','DNJNYHWh','http://URL','True','http://URL',NULL,'pending','drama','True',118844113,'http://URL','finished'),
    ('Jennifer Lawrence',207,'jennifer-lawrence',263,'1988-01-02 00:00:00','2018-08-09 00:00:00',2930442,'Lorem ipsum habitant commodo cubilia eget blandit','Suscipit augue dictum ultrices ultricies aliquam mattis nostra taciti sagittis','OqieXJHwh','http://URL','True','http://URL',NULL,'pending','comedia','True',118844112,'http://URL','finished');

这真的是数据库的最佳结构吗?例如,
('Sandra Bullock',162,'Sandra Bullock',264,'1991-10-08 00:00:00','2018-08-16 00:00:00')这些值中的这种重复没有如何优化这一点?

答案取决于您试图实现的目标。此外,了解进一步使用这些数据的方式也很重要

  • 结构不是很好。对于唯一的JSON项,您将有多条记录(它们的数量可能很大-取决于JSON)。我不确定这样检索数据是否方便。 最好使用:
  • 通常,每个表/关系表示一种“实体类型”(如客户或产品)。行表示该类型实体的实例(如“Lee”或“chair”),列表示归属于该实例的值(如address或price)

    因此,在您的情况下,我将使用多个表。
    --视频包含列{id、titulo、desc等}
    --carreira将相关“atriz”记录的id作为一个单独的列,其他列{id,inicio,final}
    --carreira_视频-存储carreira视频关系的单独表格。rable可能只包含两列:carreira_id和video_id。例如,JSON示例中的“Sandra Bullock”项包含两个视频的carreira-因此,在carreira_videos表中,您将有两条记录:

    carreira_id|video_id
    264 | 2930500
    264 | 2930499

    --atrizs带有列{atriz,atriz id,atriz slug}和单独的列相关carreira_id

  • 实际上,在您的示例中,关于大量数据重复的说法是正确的。如果JSON在“info”节点中有两个以上的项,则会有更多的重复数据。如果您将使用关系模型(在基于SQL的数据库中是首选)和上面描述的最佳模式,您将避免重复

  • 在继续之前,您需要学习关系数据库和SQL的基础知识。如果您不了解它们,那么创建优化设计是不现实的。

  • 实际上,如果您想存储JSON本身,那么您可能不需要基于SQL的数据库。您应该了解NoSQL方法和数据库


  • 一切都取决于你的目标。

    答案取决于你努力实现的目标。此外,了解进一步使用这些数据的方式也很重要

  • 结构不是很好。对于唯一的JSON项,您将有多条记录(它们的数量可能很大-取决于JSON)。我不确定这样检索数据是否方便。 最好使用:
  • 通常,每个表/关系表示一种“实体类型”(如客户或产品)。行表示该类型实体的实例(如“Lee”或“chair”),列表示归属于该实例的值(如address或price)

    因此,在您的情况下,我将使用多个表。
    --视频包含列{id、titulo、desc等}
    --carreira将相关“atriz”记录的id作为一个单独的列,其他列{id,inicio,final}
    --carreira_视频-存储carreira视频关系的单独表格。rable可能只包含两列:carreira_id和video_id。例如,JSON示例中的“Sandra Bullock”项包含两个视频的carreira-因此,在carreira_videos表中,您将有两条记录:

    carreira_id|video_id
    264 | 2930500
    264 | 2930499

    --atrizs带有列{atriz,atriz id,atriz slug}和单独的列相关carreira_id

  • 实际上,在您的示例中,关于大量数据重复的说法是正确的。如果JSON在“info”节点中有两个以上的项,则会有更多的重复数据。如果您将使用关系模型(在基于SQL的数据库中是首选)和上面描述的最佳模式,您将避免重复

  • 在继续之前,您需要学习关系数据库和SQL的基础知识。如果您不了解它们,那么创建优化设计是不现实的。

  • 实际上,如果您想存储JSON本身,那么您可能不需要基于SQL的数据库。您应该了解NoSQL方法和数据库


  • 所有这些都取决于您的目标。

    您可以识别重复的字段,并将其移动到表示该实体的单独“父”表中(例如,在这种情况下,演员表可能有意义)。然后infos表(您应该考虑一个更具描述性的名称!)将只包含actor表中匹配的actor的ID。这称为外键关系。如果您不了解数据库设计的这些基本概念,我建议您在进一步研究之前先研究一下。实体关系设计和数据库规范化是您应该搜索的主题。您可以识别重复的字段,并将它们移动到表示该实体的单独“父”表中(例如,在这种情况下,演员表可能有意义)。然后infos表(您应该考虑一个更具描述性的名称!)将只包含actor表中匹配的actor的ID。这称为外键关系。如果您不了解数据库设计的这些基本概念,我建议您在进一步研究之前先研究一下。实体关系设计和数据库规范化是您应该搜索的主题。