Abordagem relacional
Você o descreve como relação entre desbloqueadores e desbloqueados similares como neste tutorial . Sugiro aprender mais sobre álgebra relacional e bancos de dados. Eles são uma boa maneira de modelar dados. Se você aprender a consultar as informações do banco de dados, poderá modelar dados com bastante facilidade.
Não sei o quanto você sabe sobre modelar relações. Esse tutorial deve ajudá-lo com isso.
Uma solução
Eu suponho que o WoW funcione como na realidade (ehm), que é
- talento desbloqueia vários (outros) talentos
- talento é desbloqueado por vários (outros) talentos.
É a relação N: N, o que implica que você precisa do "intermediário" uma nova relação entre os dois talentos:
(talent who unlocks id, talent who is unlocked)
Dessa forma, você pode ter o talento A desbloqueando B, C e D ((A, B), (A, C), (A, D)) e o talento Y desbloqueado por X, Z e W ((X, Y), ( Z, Y), (W, Y)). Em linguagem imperativa / procedural / orientada a objetos, você faria isso como lista / matriz de pares como lá:
var unlocks_unlocked = [[A, B],[A,C],[A,D],[X,Y],[Z,Y],[W,Y]];
Portanto, no exemplo do "mundo real", você pode ter:
... ["running fast", "jumping superhigh"], ["antigravity's child", "jumping superhigh"]
e significa que "pular muito alto" é obtido depois que você tem talentos "rápidos" e "filhos da antigravidade".
Outra solução
Não joguei Diablo recentemente, mas pode ser que ele tivesse apenas:
- talento desbloqueia vários outros talentos
- talento é desbloqueado apenas por um talento.
É uma relação 1: N:
You put "is unlocked by this talent's id" variable into talent's structure
gostar:
var Talent[8] = { "name": "superpower", "unlocked by": "being Clark Kent"};
UserTalent
tabela não precisa de uma coluna de autokey.user
etalent
podem ser as únicas duas colunas e uma chave composta: elas nunca serão duplicadas e você nunca fará consultasid
.