2017-02-17 4 views
0

Soll ich das relationale Datenbankschema (3NF) für den Entwurf des Datenspeichers für Skygear verwenden?DB Scheme Design für Skygear

Zum Beispiel muss ich Benutzergruppe, die Benutzer enthält, sollte es Fall A oder B unten sein?

A.

  • Benutzer {} userId
  • Gruppe {groupId, Gruppenname}
  • Grouping (UserID groupId, Rollen}

B.

  • Gruppe {userId, groupId, groupName, role}

Ich denke, ich sollte das folgende Ergebnis schließlich bei der Weitergabe an die App haben.

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

 
    ] 
 
}

+0

Design B ist nicht in 3NF; Derselbe Gruppenname wird unnötigerweise für jede unterschiedliche Kombination wiederholt, deren Benutzer-ID & Gruppen-ID er erscheint. Eine Anwendung fragt nach den gewünschten Basistabellen ab. Relationale DBMS sind dafür gedacht. Warum denken Sie, dass es wichtig ist, dass einige Abfragen nicht gleich aussehen wie einige Tabellen im besten Datenbankentwurf? – philipxy

Antwort

1

3NF für Datenintegrität gut ist. Jeder liebt Datenintegrität, aber es ist nicht immer die erste Priorität, wenn Sie eine Anwendung entwerfen.

In dem Fall, den Sie zur Verfügung gestellt haben, werde ich wahrscheinlich für A entscheiden. B erfordert Update aller Group, wenn groupName geändert wird.

Neben der Frage, wie die Daten an die App übergeben werden, sollten Sie auch überlegen, wie Sie sie aktualisieren und erstellen können.


Wann 3NF in skygear zu brechen?

Anzahl der Benutzer in der Gruppe.

In 3NF werden Sie wahrscheinlich aggregate func verwenden. Skygear bietet es noch nicht an, wie es üblich ist, eine user_count Spalte zu group aufzunehmen. Und aktualisieren Sie die Nummer, wenn ein Benutzer hinzugefügt/entfernt wird.