2016-12-03 1 views
0

필자는 Firebase에서 머리를 감싸려고하고 있기 때문에 관계형 데이터를 올바르게 인덱싱하고 있는지 확인하고 싶습니다. 나는 사용자와 주소 사이의 양방향 관계를 가지고 있으며, 둘 다 일대일 관계입니다. 아이디어는 사용자 노드가 처음에는 전자 메일로 작성된 다음 주소를 추가 할 때 addressID의 키가 사용자 노드에 추가 될 때 동시에 userID의 키가 주소 노드에 추가된다는 것입니다. 이는 Firebsae 문서 (하단)의 "구조 데이터"섹션에서 권장되는 방법과 유사합니다. 그러나 사용자 노드 내에서 주소를 식별하고 주소 노드 내에서 사용자를 식별하기 위해 userAutoID : true 및 addressAutoID : true 대신 userAutoID, user : addressAutoID와 같은 주소가 자동 생성 된 키를 사용했습니다 자동 생성 ID를 키로 사용하면 키의 의미를 알 수 없습니다. json으로 구조는 (두 노드가 최상위 노드의 자녀) 다음과 같습니다Firebase Swift에서 관계형 데이터를 정확하게 인덱싱하기

enter image description here

당신이 주소가 사용자의 ID를 가지고 볼 수 있으며, 사용자가 주소 ID를 보유하고있다. 나는 이것을 달성하기 위해 사용했던 코드가 오래 걸리는 것처럼 느껴진다. 나는 잘못된 방향으로 나아갈 수있다. 이 코드는 사용자가 자신의 주소에 대한 양식을 작성하고 제출을 누르면 트리거됩니다. 따라서 사용자 노드는 주소 노드 앞에 있습니다. 순차적으로 for 루프를 사용하여 존재하는 각 주소의 키를 얻은 다음 다른 쿼리로 공급합니다. 그러면 현재 사용자의 ID가 현재 주소 노드에 userID 키의 값으로 존재하는지 확인합니다. 이것이 사실이라면 현재 주소의 ID를 현재 사용자와 연관된 노드 내의 addressID 값으로 설정합니다. 코드는 다음과 같습니다.

사용자 및 주소 노드가 매우 커지면 한 코드에서 두 개의 쿼리를 실행하면 비용이 높아질 수 있습니다. 모든 의견은 크게 감사하겠습니다!

+0

1) 이미지가 아닌 텍스트로 Firebase 구조를 게시하십시오. 그러면 답을 다시 입력해야하는 부담이 줄어 듭니다. 2) 귀하의 질문은 색인 생성 (즉, Firebase 색인)을 말하지만 실제로 요구하는 것은 아닙니다. 3) 주소 노드 * 앞에 사용자 노드가 존재한다고 질문하므로 주소 노드가 아직없는 경우 사용자의 주소를 검색하는 이유는 무엇입니까? 또는 사용자가 이미 자신의 주소를 입력했는지 확인하려고합니까? 1-1 이후 사용자 노드에 주소 정보를 저장하지 않는 이유가 있습니까? 질문을 명확히 할 수 있습니까? (그리고 코드 포맷을 수정하십시오!) – Jay

+0

안녕하세요 제이, 엉망으로 미안 해요, 코드를 재정렬하고 다음 번에 Firebase 구조에 텍스트를 사용해야합니다. 위의 코드는 버튼 내에 있습니다. 버튼을 누를 때 주소 객체가 설정되고 바로 다음에 위의 코드가 동일한 버튼 내에서 실행되었습니다. 귀하의 조언을 읽은 후, 나는 사용자 노드 아래에 주소를 저장했습니다, 나는 단지 것들을 overthinking 생각합니다. Firebase가 iOS 문서의 더 나은 작업을 수행하고 더 많은 예제와 작업을 제공했으면 좋겠습니다. 프로그래밍에 상당히 새로운 사람으로서, 나는 그들의 문서가 가난하다고 말해야 만합니다. –

+0

이것은 1-1이므로 주소 정보가 사용자 노드 내에 저장 될 수 있습니다. 그러나 1-many 또는 many to many가 필요한 경우 원본 구조가 필요합니다. 일반적으로 데이터를 비정규 화하는 것이 좋습니다. 원래 Firebase 문서는 현재의 문서보다 훨씬 * 좋았으며이 시점에서 상당히 약하다고 동의합니다. – Jay

답변

0

자동 생성 된 사용자 키를 주소 아래의 키로 다시 사용합니다.

- Users 
    - xyz (auto generated) 
    - email: [email protected] 

- Addresses 
    - xyz (use the previously created id here too) 
    - street 
    - author 
    - lat 
    - lon 
+0

안녕하세요 @patrickmcd, 의견을 주셔서 감사합니다, 이것은 내가 뭘했는지, 내 JSON의 이미지가 포함되어 있습니다. Addresses 노드의 userID가 자동으로 생성 된 사용자 키이고 Users 노드의 addressID가 주소의 자동 생성 된 키임을 알 수 있습니다. –

+0

내가 말하는 것은 자동으로 주소 키를 생성하지 않는다는 것입니다 .사용자를 만들 때 생성 된 것과 동일한 키를 사용하십시오. 사용자 아래의 주소 및 주소 ID에서 userID를 완전히 제거하십시오. 별도의 컬렉션에서 동일한 노드를 공유하기 때문에 자동으로 연결됩니다. – patrickmcd

+0

"다른 노드에서 동일한 노드를 공유합니다." 이들은 최상위 레벨 노드이며, 그 상위에있는 유일한 노드는 루트 노드입니다. 각 항목 (사용자 및 주소로 구성됨)에는 자동 생성 키가 있어야하며, 그 다음에는 자동 생성 키가 포함 된 사용자 및 주소 노드가 있어야한다고 말하고 있습니까? –

관련 문제