Couchbase NoSQL文档模式

Couchbase NoSQL文档模式,couchbase,nosql,Couchbase,Nosql,我不熟悉NoSQL和基于文档的模式,我正在开发一个基于健身房的培训应用程序。我正试图找出实现以下目标的最佳方法: 有一系列的“基本活动”,每一个都有变化。基本活动的下方为#1,变量为#2至#8 由于每个变体都被认为是一种高级培训技术,因此我将不提供单独的视频显示技术,也不需要任何不同的基于文本的教学信息,因此,由于大量冗余数据,这些变体在其自身的活动文档中是没有意义的。下面可以看到提议的活动文档的JSON { "id": "a::1", "doctype": "activity",

我不熟悉NoSQL和基于文档的模式,我正在开发一个基于健身房的培训应用程序。我正试图找出实现以下目标的最佳方法:

有一系列的“基本活动”,每一个都有变化。基本活动的下方为#1,变量为#2至#8

由于每个变体都被认为是一种高级培训技术,因此我将不提供单独的视频显示技术,也不需要任何不同的基于文本的教学信息,因此,由于大量冗余数据,这些变体在其自身的活动文档中是没有意义的。下面可以看到提议的活动文档的JSON

{
  "id": "a::1",
  "doctype": "activity",
  "lay_name": "15º Decline Bench Press, Barbell, Close Grip",
  "coach_name": "Bench Press, 15º Decline, Barbell, Close Grip",
  "type": "resistance",
  "author": "",
  "exp_level": "intermediate",
  "contraindicated": [
    "Shoulder Impingement"
  ],
  "technique_videos": {
    "correct": "/folder/folder/file1.mp4",
    "incorrect": "/folder/folder/file2.mp4"
  },
  "equipment": [
    "Barbell",
    "Decline Bench"
  ],
  "tags": [
    "Free Weight",
    "Mass Builder",
    "Indoor"
  ],
  "activity_variation": [
    {
      "variation": "thick_barbell",
      "lay_name": "15º Decline Bench Press, Thick Barbell, Close Grip",
      "coach_name": "Bench Press, 15º Decline, Thick Barbell, Close Grip"
    },
    {
     "variation": "with_chains",
      "lay_name": "15º Decline Bench Press, Barbell, Close Grip, With Chains",
      "coach_name": "Bench Press, 15º Decline, Barbell, Close Grip, With Chains"
    },
    {
     "variation": "thick_barbell_with_chains",
      "lay_name": "15º Decline Bench Press, Thick Barbell, Close Grip, With Chains",
      "coach_name": "Bench Press, 15º Decline, Thick Barbell, Close Grip, With Chains"
    },
    {
     "variation": "with_bands_assisting",
      "lay_name": "15º Decline Bench Press, Barbell, Close Grip, With Bands Assisting",
      "coach_name": "Bench Press, 15º Decline, Barbell, Close Grip, With Bands Assisting"
    },
    {
     "variation": "thick_barbell_with_bands_assisting",
      "lay_name": "15º Decline Bench Press, Thick Barbell, Close Grip, With Bands Assisting",
      "coach_name": "Bench Press, 15º Decline, Thick Barbell, Close Grip, With Bands Assisting"
    },
    {
     "variation": "with_bands_resisting",
      "lay_name": "15º Decline Bench Press, Barbell, Close Grip, With Bands Resisting",
      "coach_name": "Bench Press, 15º Decline, Barbell, Close Grip, With Bands Resisting"
    },
    {
     "variation": "thick_barbell_with_bands_resisting",
      "lay_name": "15º Decline Bench Press, Thick Barbell, Close Grip, With Bands Resisting",
      "coach_name": "Bench Press, 15º Decline, Thick Barbell, Close Grip, With Bands Resisting"
    }
  ],
  "description": "Excellent mass builder that focuses on the lower part of the pec.",
  "technique_description": [
    "1. bla bla",
    "2. Bla bla",
    "3. Bla bla",
    "4. Bla bla"
  ],
  "prime_mover": "Pectoralis Major",
  "focus": "Pectoralis Major - Sternal Head"
}
首先,需要查询这些活动(或练习,如果您愿意),然后作为单独的活动呈现,例如:

其次,他们还需要与(健身计划和)个人锻炼(由活动组成)相关联,并且用户需要记录他们在某一天、某一锻炼、某一特定锻炼的举重(重复次数、组数、体重)。因此,我试图找出设计模式的最佳方法,以适应这种情况。我还认为,用户应该能够在设置中指定他们可以访问哪些设备,如果他们没有东西,例如链条,那么当他们查询练习列表时,不会显示相关的练习

问题:

  • 有人能提出一个比我上面的更好的模式/流程吗?也许使用一个单独的文档来获取活动键并存储该键(活动)的相关变体会更好?有什么建议吗
  • 给出了#1的答案,在存储用户训练数据时,我应该如何处理这些名称变化,例如:
  • 15º倾斜台式压力机,厚杠铃,紧握,带链条

    {
      "id": "a::1",
      "doctype": "activity",
      "lay_name": "15º Decline Bench Press, Barbell, Close Grip",
      "coach_name": "Bench Press, 15º Decline, Barbell, Close Grip",
      "type": "resistance",
      "author": "",
      "exp_level": "intermediate",
      "contraindicated": [
        "Shoulder Impingement"
      ],
      "technique_videos": {
        "correct": "/folder/folder/file1.mp4",
        "incorrect": "/folder/folder/file2.mp4"
      },
      "equipment": [
        "Barbell",
        "Decline Bench"
      ],
      "tags": [
        "Free Weight",
        "Mass Builder",
        "Indoor"
      ],
      "activity_variation": [
        {
          "variation": "thick_barbell",
          "lay_name": "15º Decline Bench Press, Thick Barbell, Close Grip",
          "coach_name": "Bench Press, 15º Decline, Thick Barbell, Close Grip"
        },
        {
         "variation": "with_chains",
          "lay_name": "15º Decline Bench Press, Barbell, Close Grip, With Chains",
          "coach_name": "Bench Press, 15º Decline, Barbell, Close Grip, With Chains"
        },
        {
         "variation": "thick_barbell_with_chains",
          "lay_name": "15º Decline Bench Press, Thick Barbell, Close Grip, With Chains",
          "coach_name": "Bench Press, 15º Decline, Thick Barbell, Close Grip, With Chains"
        },
        {
         "variation": "with_bands_assisting",
          "lay_name": "15º Decline Bench Press, Barbell, Close Grip, With Bands Assisting",
          "coach_name": "Bench Press, 15º Decline, Barbell, Close Grip, With Bands Assisting"
        },
        {
         "variation": "thick_barbell_with_bands_assisting",
          "lay_name": "15º Decline Bench Press, Thick Barbell, Close Grip, With Bands Assisting",
          "coach_name": "Bench Press, 15º Decline, Thick Barbell, Close Grip, With Bands Assisting"
        },
        {
         "variation": "with_bands_resisting",
          "lay_name": "15º Decline Bench Press, Barbell, Close Grip, With Bands Resisting",
          "coach_name": "Bench Press, 15º Decline, Barbell, Close Grip, With Bands Resisting"
        },
        {
         "variation": "thick_barbell_with_bands_resisting",
          "lay_name": "15º Decline Bench Press, Thick Barbell, Close Grip, With Bands Resisting",
          "coach_name": "Bench Press, 15º Decline, Thick Barbell, Close Grip, With Bands Resisting"
        }
      ],
      "description": "Excellent mass builder that focuses on the lower part of the pec.",
      "technique_description": [
        "1. bla bla",
        "2. Bla bla",
        "3. Bla bla",
        "4. Bla bla"
      ],
      "prime_mover": "Pectoralis Major",
      "focus": "Pectoralis Major - Sternal Head"
    }