Approccio relazionale
Lo descrivi come relazione tra sbloccatori e sbloccati simili come in questo tutorial . Suggerisco di saperne di più sull'algebra relazionale e sui database. Sono un ottimo modo per modellare i dati. Se si impara come eseguire query sulle informazioni dal database È possibile modellare i dati abbastanza facilmente.
Non so quanto tu sappia sulle relazioni modellistiche. Quel tutorial dovrebbe aiutarti.
Una soluzione
Suppongo che WoW funzioni come nella realtà (ehm), che lo sia
- il talento sblocca diversi (altri) talenti
- il talento è sbloccato da diversi (altri) talenti.
È la relazione N: N, che implica che hai bisogno di "uomo medio" una nuova relazione tra i due talenti:
(talent who unlocks id, talent who is unlocked)
In questo modo puoi avere il talento A che sblocca B, C e D ((A, B), (A, C), (A, D)) e il talento Y sbloccato da X, Z e W ((X, Y), ( Z, Y), (W, Y)). In un linguaggio imperativo / procedurale / orientato agli oggetti Lo faresti come elenco / matrice di coppie come lì:
var unlocks_unlocked = [[A, B],[A,C],[A,D],[X,Y],[Z,Y],[W,Y]];
Quindi, per esempio nel "mondo reale" puoi avere:
... ["running fast", "jumping superhigh"], ["antigravity's child", "jumping superhigh"]
e significa che il "salto in alto" si ottiene dopo che hai talento "corsa veloce" e "figlio di antigravità".
Altra soluzione
Non ho giocato a Diablo di recente, ma potrebbe essere che avesse solo:
- il talento sblocca molti altri talenti
- il talento è sbloccato solo da un talento.
È la relazione 1: N:
You put "is unlocked by this talent's id" variable into talent's structure
piace:
var Talent[8] = { "name": "superpower", "unlocked by": "being Clark Kent"};
UserTalent
tabella non ha bisogno di una colonna autokey.user
etalent
possono essere le uniche due colonne e una chiave composita: non saranno mai duplicati e non eseguirai mai queryid
.