Pendekatan relasional
Anda menggambarkannya sebagai hubungan antara unlocker dan unlocked yang serupa seperti pada tutorial ini . Saya menyarankan untuk belajar lebih banyak tentang aljabar dan basis data relasional. Mereka adalah cara yang bagus untuk memodelkan data. Jika Anda belajar cara menanyakan informasi dari basis data, Anda dapat memodelkan data dengan cukup mudah.
Saya tidak tahu seberapa banyak Anda tahu tentang hubungan pemodelan. Tutorial itu akan membantu Anda dengan itu.
Satu solusi
Saya berasumsi bahwa WoW bekerja seperti pada kenyataannya (ehm), memang begitu
- bakat membuka beberapa bakat (lainnya)
- bakat dibuka oleh beberapa bakat (lainnya).
Itu adalah relasi N: N, yang menyiratkan Anda membutuhkan "perantara" hubungan baru antara dua talenta:
(talent who unlocks id, talent who is unlocked)
Dengan cara ini Anda dapat memiliki bakat A membuka kunci B, C dan D ((A, B), (A, C), (A, D)) dan bakat Y dibuka oleh X, Z dan W ((X, Y), ( Z, Y), (W, Y)). Dalam bahasa imperatif / prosedural / berorientasi objek Anda akan melakukannya sebagai daftar / array pasangan seperti di sana:
var unlocks_unlocked = [[A, B],[A,C],[A,D],[X,Y],[Z,Y],[W,Y]];
Jadi untuk contoh "dunia nyata", Anda dapat memiliki:
... ["running fast", "jumping superhigh"], ["antigravity's child", "jumping superhigh"]
dan itu berarti bahwa "melompat super" diperoleh setelah Anda memiliki bakat "berlari cepat" dan "anak anti-gravitasi".
Solusi lain
Saya belum pernah bermain Diablo baru-baru ini tetapi mungkin saja, bahwa itu hanya:
- bakat membuka beberapa bakat lainnya
- bakat dibuka hanya oleh satu bakat.
Ini adalah relasi 1: N:
You put "is unlocked by this talent's id" variable into talent's structure
seperti:
var Talent[8] = { "name": "superpower", "unlocked by": "being Clark Kent"};
UserTalent
Tabel Anda tidak memerlukan kolom otokey.user
dantalent
bisa menjadi hanya dua kolom dan kunci komposit: mereka tidak akan pernah menjadi duplikat dan Anda tidak akan pernah bertanyaid
.