用数据库模式表示复杂的JSON对象

时间:2019-02-21 02:35:29

标签: mysql json database

我正在尝试创建一个数据库,我可以从该数据库中获取要存储在以下JSON对象中的数据:

{
    "races": [
        {
            "name": "Mountain Dwarf",
            "asi": {
                "str": 2,
                "dex": 0,
                "con": 2,
                "int": 0,
                "wis": 0,
                "cha": 0
            },
            "proficiencies": {
                "languages": [ "Common", "Dwarvish" ],
                "armor": [ "light", "medium" ],
                "weapons": [ "battleaxe", "handaxe", "throwing hammer", "warhammer" ],
                "tools": {
                    "choose": 1,
                    "tools": [ "smith's tools", "brewer's supplies", "mason's tools" ]
                }
            },
            "darkvision": 60
        },
        {
            "name": "Wood Elf",
            "asi": {
                "str": 0,
                "dex": 2,
                "con": 0,
                "int": 0,
                "wis": 1,
                "cha": 0
            },
            // etc.
        }
    ]
}

我将数据存储在JSON对象中要比在数据库中舒服得多,因此我想向后思考。 如何将这个“多层”对象表示为SQL表?

我的最佳猜测

从我所做的研究来看,我认为解决此问题的一种好方法是建立几个不同的表,然后将它们合并以获取我需要的所有信息。

示例1

例如,我可能有一个race表和一个具有七个列名的race_asi表:race_idstrdex,{{1 }},conintwis,每场比赛都有一行。

示例2

我可能还有一个cha表和一个weapons表,其中后者是race_proficiency_weaponsraces表之间的联接表,因此它有两列:weaponsrace_id

我考虑过只有一个weapon_id表,其中有一个race_proficiency_weapons列和每种类型的武器的列,其中的数据只是一个布尔值,指示种族是否具有这种熟练程度,但是我希望我正在编写程序的用户能够即时添加其他武器类型(与示例1中提到的ASI不同)。


这是存储此数据的合适解决方案吗?再说一次,我有点SQL菜鸟,所以这个解决方案有没有出现的问题?如果是这样,什么是合适的解决方案?

0 个答案:

没有答案