Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

장군이네집

180111 firebase structure 본문

개발/Android

180111 firebase structure

kukuku0517 2018. 1. 12. 23:39

FIREBASE 구조화

https://howtofirebase.com/firebase-data-modeling-939585ade7f4

  1. Normalization관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다. 
  2. Shallow data structures

{
"users": {
"user1": {
"email": "user1@gmail.com",
"transactions": {
"transaction1": {
"total": "500",
"products": {
"product1": "paper airplanes",
"product2": "tooth picks"
}
},
"transaction2": {
"total": "250",
"products": {
"product1": "rocks and dirt",
"product2": "spatulas"
}
}
}
}
}
}

User 관련 정보가 모두 user 노드 아래에 포함되어있다.

이런 경우 user의 특정 정보(ex. email)만을 추출하는데 어려움이 있음.


{
"users": {
"user1": {
"email": "user1@gmail.com"
}
},
"transactions": {
"user1": {
"transaction1": {
"total": "500",
"products": {
"product1": "paper airplanes",
"product2": "tooth picks"
}
},
"transaction2": {
"total": "250",
"products": {
"product1": "rocks and dirt",
"product2": "spatulas"
}
}
}
}
}

user와 transaction을 분리해서 user name에 중복은 생겼으나, user data를 추출하는데 훨씬 간편해졌다.

이런 구조의 단점은 추가적 reference를 생성해야할수 있다.


데이터 사용 목적에 따라 shallow vs deep을 잘 선택해야한다.

또한 빠른 쿼리를 위해 데이터의 중복을 과감하게 사용하자.



구조화 vs 스트림 방식


구조화

{
“userChats”: {
“user1”: {
“chat1”: {
“message”: “First!”
},
“chat2”: {
“message”: “I’m still here…”
}
},
“user2”: {
“chat1”: {
“message”: “Hey user one.”
},
“chat2”: {
“message”: “Where did you go?”
}
}
}
}

구조화된 방식의 경우 너무 deep해진다. 그래서 grandchild(?)에 대한 query를 한번에 할수없게 된다.

{
“chats”: {
“chat1”: {
“user”: “user1”,
“username”: “Chris”,
“message”: “First!”
},
“chat2”: {
“user”: “user2”,
“username”: “Melissa”,
“message”: “Hey user one.”
},
“chat3”: {
“user”: “user2”,
“username”: “Melissa”,
“message”: “Where did you go?”
},
“chat4”: {
“user”: “user1”,
“username”: “Chris”,
“message”: “I’m still here…”
}
}
}

user에 중복은 생겼지만 순서대로 저장해서 한번의 query로 가져올수있다.


'개발 > Android' 카테고리의 다른 글

180120 ConstraintLayout  (0) 2018.01.20
180118 facebook 연동위한 hash key 등록  (0) 2018.01.18
180117 FirebaseAuth auto-login  (0) 2018.01.17
180117 Custom drawing (Canvas & Paint)  (0) 2018.01.17
180105 XML conventions  (0) 2018.01.05
Comments