장군이네집
180111 firebase structure 본문
FIREBASE 구조화
https://howtofirebase.com/firebase-data-modeling-939585ade7f4
- Normalization : 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다.
- 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 |