Approche relationnelle
Vous le décrivez comme une relation entre les déverrouilleurs et déverrouillés similaires comme dans ce tutoriel . Je suggère d'en savoir plus sur l'algèbre relationnelle et les bases de données. Ils sont une bonne façon de modéliser les données. Si vous apprenez à interroger les informations de la base de données, vous pouvez modéliser les données assez facilement.
Je ne sais pas ce que vous savez sur la modélisation des relations. Ce didacticiel devrait vous y aider.
Une solution
Je suppose que WoW fonctionne comme dans la réalité (ehm), qu'il est
- le talent débloque plusieurs (autres) talents
- le talent est débloqué par plusieurs (autres) talents.
C'est la relation N: N, ce qui implique que vous avez besoin de "l'homme du milieu" une nouvelle relation entre les deux talents:
(talent who unlocks id, talent who is unlocked)
De cette façon, vous pouvez avoir le talent A déverrouillant B, C et D ((A, B), (A, C), (A, D)) et le talent Y déverrouillé par X, Z et W ((X, Y), ( Z, Y), (W, Y)). Dans un langage impératif / procédural / orienté objet, vous le feriez en tant que liste / tableau de paires comme ici:
var unlocks_unlocked = [[A, B],[A,C],[A,D],[X,Y],[Z,Y],[W,Y]];
Donc, pour l'exemple "du monde réel" Vous pouvez avoir:
... ["running fast", "jumping superhigh"], ["antigravity's child", "jumping superhigh"]
et cela signifie que "sauter très haut" est obtenu après que vous ayez des talents de "courir vite" et "d'enfant d'antigravité".
Autre solution
Je n'ai pas joué à Diablo récemment mais il se peut qu'il n'ait que:
- le talent débloque plusieurs autres talents
- le talent est débloqué par un seul talent.
C'est une relation 1: N:
You put "is unlocked by this talent's id" variable into talent's structure
comme:
var Talent[8] = { "name": "superpower", "unlocked by": "being Clark Kent"};
UserTalent
table n'a pas besoin d'une colonne autokey.user
ettalent
peut être les deux seules colonnes et une clé composite: ce ne seront jamais des doublons et vous ne demanderez jamais deid
toute façon.