2016-06-02 4 views
1

이것은 초보자가 아닌 수준의 기본적인 질문입니다. 이것은 Backendless에만 해당됩니다.백엔드에서의 양방향 관계 - 상호 연관성이 높은 데이터로 작업하기

몇 가지 형태로 서로 연관되어 있고 다양한 방향에서 탐험해야하는 작은 테이블 세트로 작업하면서 여러 가지 시나리오를 해결할 수 있기를 바랍니다.

기본 예제는 PersonTable 및 AddressTable과 같은 것입니다. 주소록과 streetName, houseNumber 등의 다양한 속성을 포함하는 주소록을 포함하는 PersonTable

주 내비게이션에서 사용자에게 두 가지 별개의보기를 제공하고 더 자세히 조사하기.

View1 : "사람"을 클릭하면 PersonTable에서 사람들의 목록을 가져옵니다. 이 목록은 보조 탐색 창에 나타납니다. 개인을 클릭하면 그 사람과 관련된 주소/주소가 제공됩니다.

그러나 나는 또한 역으로이 작업을 수행 할 수 있도록하려면 :

뷰 2 : 당신은 "주소"를 클릭, 당신은 AddressTable에서 주소의 목록을 얻을. 이 목록은 보조 탐색 창에 나타납니다. 개별 주소를 클릭하면 해당 주소와 관련된 사람/사람이 제공됩니다.

따라서 단방향 접근 방식에서 PeopleTable과 AddressTable 간의 관계가 있습니다. 이것은 뷰 1에 완벽하게 적합합니다. 하나의 쿼리는 보조 탐색을위한 데이터를 제공하며 해당 쿼리의 결과에는 드릴 다운에 필요한 관계 데이터가 포함될 수 있습니다.

그러나보기 2를 지원하려면 관계의 방향과 시작 위치에서 두 가지 쿼리를 수행해야합니다.

더 많은 테이블과 필드가있는 더 큰 데이터 세트로이 값을 확장하면 내 관심이 더 분명해질 수 있습니다. 초기 보조 탐색 항목 작성시 관계의 부모로부터 일부 데이터를 실제로 제공하려고하기 때문에. 즉, 항목을 나열하는 해당 테이블의 초기 쿼리와 초기 목록에 표시된 데이터를 완성하기 위해 각 개별 항목에 대한 쿼리 (관계에서 부모가 필요로하는 데이터를 얻는 쿼리)를 의미합니다. (그런 다음 항목을 클릭하면 더 자세한 정보가 제공됩니다). 분명히이 관계가 바뀔 수 있고 나는 부모 데이터가 아닌 자식 데이터를 가져올 것입니다. 그러나 다른 방향 (다른 뷰)의 데이터를 원할 때 나는 다시 같은 상황에 있습니다.

TL : 나는 어떤 방향 으로든 테이블을 트래버스하고 데이터를 드릴링 할 수 있어야하며 주어진 경우에 필요한 쿼리 수를 최소화해야합니다. 많은 관계가 보장되는 경우입니까?

질문의 근원에 도달하기 : 나의 이해는 Backendless가 지원하지만, 일반적으로 양방향 관계는 (적어도 SQL 세계에서는) 눈살을 찌푸리게됩니다.

그래서 실제로 가장 좋은 방법은 무엇입니까? 단순히 논리적 인 "쿼리를 줄이는 데 도움을 줄 때 관계 만들기"입니까?

답변

0

양방향성이 작동하지 않지만 여기에서도 눈살을 찌푸리게됩니다. 많이 사용되지 않기 때문에 몇 가지 버그를 발견 할 수 있습니다.

이유는 그것이 필수적이지 않다는 것입니다. 역으로 내용을 요청할 수 있다는 것을 이미 알고 있습니다.

하지만, 당신이 그들을 사용하지 말아야하는 이유는, 당신이 할 수있는 ... 또한

이 자동 로딩 여분의 모든 데이터 당신이 당신이 명시 적으로 요청을보다 더 비용이 많이 드는 사용하지 않을 수도 때입니다 모든 다리 작업을 수행하는 사용자 지정 서비스를 만들어 네트워크 트래픽 측면에서 쿼리 영향을 제한하십시오. 내가보기 2를 지원하기를 원한다면

+0

자동로드가 내 관심사가 아닙니다. 테이블에 걸쳐 레코드를 관련시키는 것에 관심이 있습니다. 다른 테이블의 연관된 레코드를 포함하는 각 테이블의 필드를 갖는 것이 더 효율적입니다. 필자는 모든 PersonTable을 조회하여 특정 Address 레코드와의 관계를 갖는 모든 레코드를 찾지 않고 관련 Person 레코드의 정확한 ID를 특정 Address 레코드에서 직접 가져올 수 있다는 것을 알고 있습니다. 그것은 연관된 레코드에 대한 포인터를 유지하는 복잡성이 낮아진 것처럼 보이고, 나의 이해는 이것이 백엔드리스의 관계가 무엇인지에 대한 것입니다. –

+0

데이터를 자동로드하는 경우에만 관계를 쿼리 할 필요가 없습니다. – Wain

0

그러나, 나는이 쿼리 관계의 방향을 주어 내가 시작 어딘지 수행해야합니다.

쿼리 구문이 "역방향 조회"를 지원하기 때문에 두 개의 쿼리를 수행하는 것이 반드시 백 엔드가 아니어도됩니다. 당신의 사람 및 주소 테이블에 대한 예를 들어

childRelation.objectId = 'childObjectId' 

부모 테이블의 관련 열이라고 가정 : 그것은 "아이"개체를 알고 의미, 당신은 "whereClause"의 다음과 같은 구문을 사용하여 부모를 조회 할 수 있습니다 "주소"이며 일대 다의 관계입니다. 그런 다음 Person 테이블로 전송 쿼리는 다음과 같습니다

addresses.objectId = 'specific-objectId-value-from-Address' 

는 Backendless 콘솔을 사용하여 whereClause 쿼리를 테스트 할 수 있습니다 유의하십시오. 해당 기능에 대한 기사는 다음과 같습니다. https://backendless.com/feature-14-sql-based-search-for-data-objects-using-console/

희망이 있습니다.