【问题标题】:Making sure the data is similar at different tables确保不同表中的数据相似
【发布时间】:2022-01-27 12:47:01
【问题描述】:

您好,我想做类似的事情,当父房间下的“始终”内有数据更改时,这些数据更改必须与相应的客户子“始终”相似。

我不确定如何实现它,因为如何遍历 CUstomerBookedRooms 的每个子节点,这些子节点是那些各自的客户,然后检查该客户在其各自的父节点下是否有“始终”。

这是我的 JSON 文件:

{
  "Customer" : {
    "johnny123" : {
      "email" : "johnny@gmail.com",
      "fullname" : "johnny",
      "password" : "Abcbc12345",
      "username" : "johnny123"
    },
    "tjing123" : {
      "email" : "jh@gmail.com",
      "fullname" : "JingHuan",
      "password" : "1",
      "username" : "tjing123"
    }
  },
  "CustomerBookedRooms" : {
    "johnny123" : {
      "Always" : {
        "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F20476d50-0256-4637-a85f-88cfb0d49509%2Fcontent%3A%2Fcom.android.providers.media.documents%2Fdocument%2Fimage%253A76555?alt=media&token=9042d0c2-1203-48a9-85e0-66de5c30eb84",
        "roombedcounts" : "One Bed",
        "roomcapacity" : "1 pax",
        "roomcharacteristics" : "Cozy",
        "roomname" : "Always",
        "roomprice" : "588.00",
        "roomstatus" : "Available",
        "roomtype" : "Single Room",
        "username" : "johnny123"
      }
    },
    "tjing123" : {
      "Always" : {
        "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F20476d50-0256-4637-a85f-88cfb0d49509%2Fcontent%3A%2Fcom.android.providers.media.documents%2Fdocument%2Fimage%253A76555?alt=media&token=9042d0c2-1203-48a9-85e0-66de5c30eb84",
        "roombedcounts" : "One Bed",
        "roomcapacity" : "1 pax",
        "roomcharacteristics" : "Cozy",
        "roomname" : "Always",
        "roomprice" : "588.00",
        "roomstatus" : "Available",
        "roomtype" : "Single Room",
        "username" : "tjing123"
      },
      "The Nuts" : {
        "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2Fd0f0279a-121b-4747-bdf0-76c9e7bfb30c%2Fcontent%3A%2Fcom.android.providers.media.documents%2Fdocument%2Fimage%253A76556?alt=media&token=e234d404-adfd-4a64-b180-50408c90a823",
        "roombedcounts" : "One Bed",
        "roomcapacity" : "2 pax",
        "roomcharacteristics" : "Cozy",
        "roomname" : "The Nuts",
        "roomprice" : "258.00",
        "roomstatus" : "Available",
        "roomtype" : "Master Room",
        "username" : "tjing123"
      }
    }
  },
  "Rooms" : {
    "Always" : {
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F20476d50-0256-4637-a85f-88cfb0d49509%2Fcontent%3A%2Fcom.android.providers.media.documents%2Fdocument%2Fimage%253A76555?alt=media&token=9042d0c2-1203-48a9-85e0-66de5c30eb84",
      "roombedcounts" : "One Bed",
      "roomcapacity" : "1 pax",
      "roomcharacteristics" : "Cozy",
      "roomid" : "1111",
      "roomname" : "Always",
      "roomprice" : "588.00",
      "roomstatus" : "Available",
      "roomtype" : "Single Room"
    },
    "HEHE" : {
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F36b436d2-0897-41a3-9d08-0ec48ec13a5d%2Fcontent%3A%2Fcom.android.providers.media.documents%2Fdocument%2Fimage%253A25?alt=media&token=2984d69a-b52c-4003-9adc-eb7556b97bf7",
      "roombedcounts" : "Three Beds",
      "roomcapacity" : "2 pax",
      "roomcharacteristics" : "Scenery View",
      "roomid" : "1111",
      "roomname" : "HEHE",
      "roomprice" : "399.00",
      "roomstatus" : "Unavailable",
      "roomtype" : "Master Room"
    },
    "Huan&Jian" : {
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2Fd8ad8454-29b4-4a44-b2c0-4da584c0cf17%2Fcontent%3A%2Fcom.android.providers.media.documents%2Fdocument%2Fimage%253A71334?alt=media&token=0cbd8564-adbd-4a69-8bbb-4c0b8af1ab5c",
      "roombedcounts" : "One Bed",
      "roomcapacity" : "2 pax",
      "roomcharacteristics" : "Cozy",
      "roomid" : "1314",
      "roomname" : "Huan&Jian",
      "roomprice" : "188.00",
      "roomstatus" : "Maintenance",
      "roomtype" : "Couple Room"
    },
    "Kokomi" : {
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2F175ac041-af4d-4ffd-8b0f-0f04f3b293f5%2Fcontent%3A%2Fcom.google.android.apps.photos.contentprovider%2F0%2F1%2Fmediakey%253A%252Flocal%25253Ab456c215-0536-4e05-8f77-616f83d36055%2FORIGINAL%2FNONE%2F1931479739?alt=media&token=1cab4f94-929f-4f52-8a46-aa76c82a0848",
      "roombedcounts" : "Two Beds",
      "roomcapacity" : "2 pax",
      "roomcharacteristics" : "Cozy",
      "roomid" : "5555",
      "roomname" : "Kokomi",
      "roomprice" : "499.00",
      "roomstatus" : "Maintenance",
      "roomtype" : "Couple Room"
    },
    "The Nuts" : {
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/finalyearprojectapplicat-8a301.appspot.com/o/RoomImageStorage%2Fd0f0279a-121b-4747-bdf0-76c9e7bfb30c%2Fcontent%3A%2Fcom.android.providers.media.documents%2Fdocument%2Fimage%253A76556?alt=media&token=e234d404-adfd-4a64-b180-50408c90a823",
      "roombedcounts" : "One Bed",
      "roomcapacity" : "2 pax",
      "roomcharacteristics" : "Cozy",
      "roomid" : "7272",
      "roomname" : "The Nuts",
      "roomprice" : "258.00",
      "roomstatus" : "Available",
      "roomtype" : "Master Room"
    }
  },
  "Staff" : {
    "tt" : {
      "email" : "raymondting521@gmail.com",
      "fullname" : "raymondting",
      "password" : "1",
      "username" : "tt"
    }
  }
}

【问题讨论】:

    标签: java android firebase-realtime-database


    【解决方案1】:

    无法在所有CustomerBookedRooms 子节点下搜索Always 键。

    您当前的数据模型可以轻松找到特定客户预订的所有房间,而不是预订特定房间的所有客户。

    要允许该用例,您需要添加另一个顶级数据结构,这与您的 CustomerBookedRooms 分支本质上是相反的,从每个房间映射回预订它的客户。

    RoomsToCustomer: {
      "Always": {
        "johnny123": true,
        "tjing123": true
      },
       "The Nuts": {
        "tjing123": true
      }
    }
    

    使用这个额外的数据结构,您可以轻松地查找给定房间 ID 的客户,然后根据该结果在 CustomerBookedRooms 节点下更新他们。

    当您在 NoSQL 数据库中存在双向关系时,这很常见,因此我建议您查看我对这些相关问题的回答:

    【讨论】:

    • 感谢@Frank van Puffelen 的回答,澄清一下,我需要添加一个表,其父名称为 RoomsToCustomer 以及所有“房间名称”的孩子,并且每当一位客户决定预订该特定房间时,假设客户想要“始终”预订房间,那么我只是在 RoomToCustomer 特定房间名称下将客户名称分配为“true”?我想我有一个想法,这是你的意思吗?
    • 新分支的名称并不重要。重要的是,在它下面你首先有房间钥匙,然后在它下面有那个房间的用户钥匙。我在这里使用true 作为标记,因为一个键在它有值之前不会存在。实际值并不重要,所以我使用了 true,但还有很多其他场景使用时间戳作为值,以便您在预订日期或复制整个属性集的位置订购它们来自等效的 CustomerBookedRooms 子节点。
    • 非常感谢先生,我想我明白你的意思了!
    • 先生,这是正确的检查方法吗? if(snapshot.child("Always").child(johnny123).equals(true)){}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多