2017-02-17 1 views
0

Skygear 용 데이터 저장소 설계에 관계형 데이터베이스 스키마 (3NF)를 사용해야합니까?Skygear 용 DB Scheme Design

예를 들어 아래의 사례 A 또는 B에 해당하는 사용자가 포함 된 사용자 그룹이 있어야합니까?

A.

  • 사용자 {userId를}
  • 그룹 {의 groupId, groupName을}
  • 그룹화 (사 용자 ID의 groupId, 역할}

B.

  • 그룹 {userId, groupId, groupName, role}

결국 앱에 전달할 때 다음 결과가 발생한다고 생각합니다.

{ 
 
    "groupName":"Group A", 
 
    "groupId":"G123", 
 
    "administrator":[ 
 
     { 
 
     "userId":"U123" 
 
     }, 
 
     { 
 
     "userId":"U456" 
 
     } 
 
    ], 
 
    "creator":{ 
 
     "userId":"U123" 
 
    }, 
 
    "member":[ 
 

 
    ] 
 
}

+0

디자인 B는 3NF에 없습니다. 동일한 그룹 이름이 모든 조합 (사용자 ID 및 그룹 ID)에 대해 불필요하게 반복됩니다. 응용 프로그램은 기본 테이블과 관련하여 원하는 것을 쿼리합니다. 관계형 DBMS는이를위한 것입니다. 어떤 쿼리가 최상의 데이터베이스 디자인에서 일부 테이블처럼 보이지 않는 것이 중요하다고 생각하는 이유는 무엇입니까? – philipxy

답변

1

3NF 데이터 무결성을 위해 좋다 (한 레벨 만이있다). 누구나 데이터 무결성을 좋아하지만 애플리케이션을 설계 할 때 항상 최우선 순위는 아닙니다.

제공 한 경우 groupName이 변경되면 A. B는 모두 Group의 업데이트가 필요합니다.

데이터가 앱에 전달되는 방법을 고려하면 업데이트 및 생성 방법도 고려해야합니다.


skygear에서 3NF를 끊을 때?

그룹에 사용자가 없습니다.

3NF에서는 아마도 aggregate func를 사용하게됩니다. Skygear는 group 레코드에 user_count 열을 추가하는 일반적인 방법으로 아직 제공하지 않습니다. 사용자가 추가/제거 될 때 번호를 업데이트하십시오.