Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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
Python 从嵌套的JSON创建关系数据库_Python_Postgresql_Database Design_Foreign Keys - Fatal编程技术网

Python 从嵌套的JSON创建关系数据库

Python 从嵌套的JSON创建关系数据库,python,postgresql,database-design,foreign-keys,Python,Postgresql,Database Design,Foreign Keys,因此,我从Riot中提取了大量数据,因为我想获取游戏信息并对其进行解析/数据分析,还可以将其导入网站,所以我选择使用PostgreSQL,但我在表的结构方面遇到了很多问题 下面是我从中提取的嵌套JSON示例 我遇到的最大的问题是,我对数据库一般来说都是新手,我不太擅长理解概念,我一直在网上浏览教程,但我似乎不能把脑袋放在外键上 如果我有一个嵌套的JSON,它通过game_id被标识为一个特定的游戏实例,比如 { game_id: 123456 ... } 还有多个嵌套组件,它

因此,我从Riot中提取了大量数据,因为我想获取游戏信息并对其进行解析/数据分析,还可以将其导入网站,所以我选择使用PostgreSQL,但我在表的结构方面遇到了很多问题

下面是我从中提取的嵌套JSON示例

我遇到的最大的问题是,我对数据库一般来说都是新手,我不太擅长理解概念,我一直在网上浏览教程,但我似乎不能把脑袋放在外键上

如果我有一个嵌套的JSON,它通过game_id被标识为一个特定的游戏实例,比如

{ 
    game_id: 123456
    ...
}
还有多个嵌套组件,它们也有我想单独存储在其他表中的键

比如说,

{
    game_id: 123456
    ...
    {
        team_id: 123456
        ...
            {
                participant_id: 123456
                ...
            }
     }
}
那么,每个游戏表、团队表和参与者表是否都应该有一个外键,以便游戏表有一个指向团队表的外键,团队表有一个指向参与者表的外键

例如:

创建桌面游戏(
游戏id串行主键,
团队id系列参考游戏团队(团队id),
...
)
创建桌面游戏团队(
团队id序列主键,
参与者id系列参考游戏参与者(参与者id),
...
)
创建桌面游戏参与者(
参与者id整数主键,
统计数据id系列参考游戏参与者统计数据(统计数据id),
...
)

我认为您的困惑源于您使用收集的json数据反向构建RDB,您看到的是结果而不是过程。RDB中的关系是一对一、一对多和多对多,称为“基数”。一个游戏可以包含多个团队,但一个团队只能引用它所属的一个游戏。团队的参与者也是如此

创建桌面游戏(
游戏id整数主键,
平台整数,
游戏创建日期时间,
...
)
由于基数对于多个团队来说是一场游戏,因此可以通过在团队表中引用游戏,然后在参与者表中引用团队来建模此关系:

创建表格团队(
团队id整数主键,
博弈id整数引用博弈(博弈id),
温布尔,
...
)
创建桌面教区裤(
参与者id整数主键,
团队id整数引用团队(团队id),
...
)

现在,无论何时从游戏表中查询游戏行,都要添加类似以下内容:
Select team\u id from Teams Join Games on Teams.game\u id=Games.game\u id
,查询现在包含关于每个团队及其所属游戏的信息。引用另一个表的方式完全取决于基数,所以最好创建实体关系图来帮助您导航表

在您的问题中更具体地说明您对关系数据库不了解的地方。此外,请举一个简单的例子。你不应该期望人们浏览你所有的表格并试图理解它们。这是你的工作。将JSON这样的树数据模型转换为PostgreSQL这样的关系模型是一个非常困难的项目;你为什么要这么做?您可以直接在JSON上存储和查询、解析和分析;为什么不这样做呢?@DourHighArch我希望最终通过Heroku上的仪表板运行分析和显示,并通过Amazon RDS实例连接到它。我还拥有大约4.5 GB的数据,因此在我看来,首先系统地将其输入数据库更有意义。¯_(ツ)_/¯