Mysql 从JSON多维数组到SQL
我有这个JSON结构,需要将它传递到数据库。但是我不知道我所做的结构是否是最好的,代码中有一些重复,我不认为这是正确的,我认为这是不必要的 JSON:Mysql 从JSON多维数组到SQL,mysql,sql,json,Mysql,Sql,Json,我有这个JSON结构,需要将它传递到数据库。但是我不知道我所做的结构是否是最好的,代码中有一些重复,我不认为这是正确的,我认为这是不必要的 JSON: { "info": [ { "atriz": "Sandra Bullock", "atriz-id": "162", "atriz-slug": "sandra-bullock", "carreira": {
{
"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。这称为外键关系。如果您不了解数据库设计的这些基本概念,我建议您在进一步研究之前先研究一下。实体关系设计和数据库规范化是您应该搜索的主题。