BAB IV PEMODELAN DATA NUSANTARA ONLINE Pada bab ini dijelaskan pembentukan model data Nusantara Online lewat beberapa tahapan yaitu pembahasan Nusantara Online, identifikasi entitas, identifikasi hubungan antar entitas, identifikasi constraint, pemodelan skema konseptual, pemodelan skema logis, dan pemodelan skema fisik. Pada tahap akhir bab ini akan dihasilkan suatu skema model data yang siap untuk diimplementasikan.
IV.1 Nusantara Online Nusantara Online adalah sebuah permainan komputer bertipe MMORPG. Permainan Nusantara Online sekarang berada dalam tahap pengembangan. Nusantara Online dikembangkan dalam arsitektur client server. Dalam Nusantara Online terdapat fiturfitur khusus yang menggambarkan bentuk permainan. Penjelasan Nusantara Online lebih jauh bisa dilihat di lampiran A.
Penjelasan Nusantara Online dilihat dari sudut pandang proses dijelaskan pada lampiran B. Dari penjelasan tersebut dilakukan identifikasi entitas.
IV.2 Identifikasi Entitas Entitas adalah suatu objek atau benda dalam dunia nyata yang dapat dibedakan dari objek yang lain. Sebagai contoh, setiap orang dalam organisasi adalah entitas. Setiap entitas memiliki kepemilikan yang berbeda. Nilai dari kepemilikan dari setiap orang mengidentifikasi orang tersebut. Dalam identifikasi entitas, objek-objek yang memiliki kepemilikan dan atribut yang sama akan dikelompokkan. Pengelompokan objek akan bisa dilihat melalu diagram:
IV-1
IV-2
IV-1 Identifikasi Objek dalam Nusantara Online
Dari objek-objek yang ada dalam diagram bisa dilihat bentuk pengelompokkan sesuai dengan kesamaan sifat atau perilakunya. Berikut ini adalah keterangan objek-objek yang akan diidentifikasi sebagai entitas dalam Nusantara Online dan bentuk perilakunya.
IV.2.1 Player Player sering disebut juga pemain. Pemain sudah dijelaskan pada sub bab III.5.1. Player hubungannya sangat erat dengan pemain yang memainkan game Nusantara Online. Pemain dalam Nusantara Online terhubung ke server dan harus memiliki akun untuk dapat bermain dalam Nusantara Online. Player dalam Nusantara Online akan diidentifikasi sebagai entitas dengan beberapa atribut yang dimilikinya, yaitu: 1. Id, setiap pemain yang mendaftar dalam game Nusantara Online akan memiliki id yang unik. 2. Nama, setiap pemain yang terdaftar harus memasukkan namanya pada saat pendaftara untuk dapat bermain dalam game Nusantara Online. 3. Alamat email, setiap pemain yang mendaftar harus memasukkan alamat email pada saat pendaftaran pemain. Alamat email ini digunakan sebagai alat komunikasi antara administrator server game dengan pemain.
IV-3
4. Password, setiap pemain yang terdaftar memiliki password. Password digunakan sebagai alat proteksi sehingga: a. Data pemain yang ada di server tidak bisa dimanipulasi oleh pemain lain. b. Karakter yang dimiliki pemain tidak bisa dimanipulasi oleh pemain lain.
IV.2.2 Entitas-entitas Objek Hidup Dalam Nusantara Online, didapatkan kenyataan terdapat objek yang hidup. Identifikasi suatu objek hidup adalah objek tersebut memiliki kecerdasan untuk melakukan berbagai hal yang bisa dilakukan mahkluk hidup seperti berjalan, berbicara, bertarung, menggunakan barang, dan lain sebagainya. Persamaan tiga objek hidup adalah: 1. IdObjekHidup, setiap objek hidup memiliki id. Untuk membedakan satu objek hidup dengan objek hidup yang lain dibutuhkan sebuah id yang unik. 2. Posx, posisi dalam koordinat x objek tersebut berdiri 3. Posy, posisi dalam koordinat y objek tersebut berdiri 4. Idkingdom, id dari kerajaan yang memilikinya 5. Status a. Health Point (HP), hp merupakan representasi angka dari keberlangsungan hidup karakter. Jika mencapai 0 maka karakter dinyatakan mati. b. Magical
Point
(MP),
mp
merupakan
representasi
angka
dari
keberlangsungan kekuatan yang dapat digunakan untuk menggunakan serangan magic atau jurus. Jika mencapai 0 maka karakter tidak bisa menggunakan serangan magic atau jurus lagi. c. MaxHP, maxhp merupakan nilai maksimum dari HP d. MaxMP, maxmp merupakan nilai maksimum dari MP e. RegenHP, regenhp merupakan nilai dari penyembuhan raga karakter. Jika nilai regenhp semakin tinggi maka hp karakter akan bertambah setiap detik dengan semakin tinggi juga. f. RegenMP, regenmp merupakan nilai dari penyembuhan jiwa karakter. Jika nilai regenmp semakin tinggi maka mp karakter akan bertambah setiap detik dengan semakin tinggi juga.
IV-4
g. DEF, DEF merupakan nilai dari ketahanan raga karakter. Jika karakter akan diserang lewat serangan fisik maka nilai DEF akan mengurangi jumlah HP yang akan hilang. h. MagicDEF, MagicDEF merupakan nilai dari ketahanan jiwa karakter. Jika karakter akan diserang dengan menggunakan serangan yang bisa mengurangi nilai MP, maka nilai MagicDEF akan mengurangi jumlah MP yang akan hilang. i. ATTSpeed, ATTSpeed merupakan nilai dari kecepatan serang karakter. Nilai kecepatan serang ini akan mendefinisikan jumlah serangan fisik yang dapat dilakukan dalam satu menit j. Strength (STR), STR adalah nilai dari kehancuran yang bisa ditimbulkan oleh serangan fisik pemain pada monter atau karakter lain. k. Vitality (VIT), VIT adalah nilai dari ketahanan karakter dalam menanggulangi serangan fisik. Nilai vitalitas juga bisa menambahkan jumlah HP karakter. l. Agility (AGG), AGG adalah nilai dari kecepatan serang dan menghindar karakter. Nilai AGG yang tinggi akan menyebabkan karakter tidak bisa terkena serangan fisik atau biasa disebut miss. m. Accuracy (ACC), ACC adalah nilai dari ketepatan serangan karakter. Nilai ACC akan berdampak pada nilai serangan jarak jauh. n. Intelligence (INTE), INTE adalah nilai dari kecerdasan karakter. Nilai INTE berpengaruh pada kekuatan sihir atau kekuatan serangan bertipe sihir. o. Mentality (MEN), MEN adalah nilai pertahanan karakter terhadap serangan sihir. Nilai MEN juga bisa meningkatkan jumlah MP dari karakter p. Stamina (STA), nilai STA menentukan kemampuan regenerasi HP dan MP q. Luck (LUC), nilai LUC menyatakan keberuntungan karakter. Maksud dari keberuntungan disini adalah keberuntungan untuk tidak terkena serangan fisik atau menyerang lawan dengan serangan fisik yang lebih akurat dan besar kekuatannya.
IV-5
6. Body Equipment a. RightHandEquip, merupakan slot tangan kanan pada tubuh karakter. Slot tangan kanan ini bisa diisi dengan equipment senjata atau tameng. b. LeftHandEquip, merupakan slot tangan kiri pada tubuh karakter. Slot tangan kiri bisa diisi dengan equipment senjata atau tameng. c. HeadEquip, merupakan slot kepala pada tubuh karakter. Slot kepala bisa diisi dengan equipment kepala atau pelindung kepala. d. BodyEquip, merupakan slot badan pada tubuh karakter. Slot badan bisa diisi dengan equipment pelindung badan atau biasa disebut armor. e. LegEquip, merupakan slot kaki pada tubuh karakter. Slot kaki bisa diisi dengan equipment pelindung kaki seperti sepatu atau sandal. f. Accessory 1,2, dan 3, merupakan slot asesoris pada tubuh karakter. Asesoris bisa diisi dengan equipment yang terdefinisi sebagai asesoris. Contoh dari aksesoris adalah cincin, kalung, jimat, dan lain-lain. Perbedaan antara tiga objek hidup yang paling mendasar adalah: 1. Karakter bisa mengambil quest 2. NPC bisa memberikan quest 3. Monster memiliki fungsi untuk selalu menyerang dengan keganasan yang berbeda Entitas-entitas yang merupakan objek hidup adalah: IV.2.2.1 Karakter Karakter sebelumnya sudah pernah dijelaskan secara singkat pada sub bab III.5.2. Karakter merupakan visualisasi pemain dalam dunia permainan. Karakter dapat dikembangkan oleh pemain dan dimodifikasi sesuai dengan keinginan pemain, Karakter dapat dikontrol oleh pemain secara bebas dalam dunia permainan. Dalam permainan, karakter memiliki sifat tertentu. Beberapa objek dalam permainan dapat dikelompokkan sebagai entitas karakter karena memiliki atribut: 1. Nama, setiap karakter memiliki nama. Nama dibutuhkan untuk mengidentitaskan karakter. Dalam permainan, nama akan banyak digunakan untuk memanggil karakter. 2. Level, level digunakan untuk menunjukkan tingkat kemampuan karakter secara global. Semakin tinggi level karakter maka semakin tinggi juga kemampuan karakter tersebut.
IV-6
3. Bentuk tubuh, bentuk tubuh digunakan untuk merepresentasikan karakter dalam visualisasi permainan jika dilihat di layar komputer. Visualisasi yang dilakukan akan membuat karakter terlihat sebagai objek tiga dimensi dalam layar komputer. a. Head, merepresentasikan bentuk kepala karakter b. Body, merepresentasikan bentuk badan karakter c. Leg, merepresentasikan bentuk kaki karakter d. Hand, merepresentasikan bentuk tangan karakter e. Hair, merepresentasikan bentuk rambut karakter 4. Pengalaman, pengalaman merupakan sejumlah angka yang merepresentasikan sejumlah kegiatan yang sudah dilakukan karakter. Pengalaman karakter bertambah jika karakter tersebut melakukan sesuatu dalam dunia permainan.
IV.2.2.2 Monster Monster sebenarnya merupakan NPC untuk bagian musuh. Hal ini sudah dijelaskan pada subbab III.5.2. Monster merupakan visualisasi artificial intellegence dalam dunia permainan. Monster tidak dapat berkembang dalam permainan dengan sendirinya. Jika monster ingin dikembangkan maka monster harus dikembangkan oleh administrator server. Monster dapat berjalan dan menyerang secara bebas dalam dunia permainan sesuai denrgan segala kemungkinan yang ada dalam aturan artificial intelligence milik monster tersebut. Dalam permainan, monster memiliki sifat tertentu. Beberapa objek dalam permainan dapat dikelompokkan sebagai entitas monster karena memiliki atribut: 1. Nama, setiap monster memiliki nama. Nama dibutuhkan untuk mengidentitaskan monster. Dalam permainan, nama akan banyak digunakan untuk memanggil monster. 2. Level, level digunakan untuk menunjukkan tingkat kemampuan monster secara global. Semakin tinggi level monster maka semakin tinggi juga kemampuan monster tersebut. 3. Bentuk badan, bentuk badan digunakan untuk merepresentasikan monster dalam visualisasi permainan jika dilihat di layar komputer. Visualisasi yang dilakukan akan membuat monster terlihat sebagai objek tiga dimensi dalam layar komputer.
IV-7
IV.2.2.3 NPC NPC adalah objek dalam Nusantara Online yang berperan sebagai karakter yang tidak bisa dimainkan oleh pemain. Untuk melihat lebih jelas, fungsi dan peran NPC bisa dilihat dalam sub bab III.5.6 bagian NPC bukan musuh. Sekelompok objek yang didefinisikan sebagai entitas NPC memiliki atribut yang sama dengan monster. Tambahan atribut pada NPC yaitu: 1. Tipe NPC, merupakan tipe dari fungsi dan peran NPC yaitu: a. Satu untuk pemberi quest b. Dua untuk pemilik toko (pedagang item dan equipment)
IV.2.3 Area Mengacu pada sub bab III.5.5 bahwa area adalah salah satu objek dalam MMORPG. Area dalam permainan MMORPG merupakan lokasi tempat karakter, monster, NPC berdiri. Seperti dalam kehidupan nyata, area dalam MMORPG berarti daerah atau lokasi. Dalam MMORPG terdapat banyak objek yang bisa dikelompokkan sebagai area. Objek-objek area tersebut memiliki atribut: 1. Id, setiap area memiliki id. Untuk membedakan satu area dengan area lain dibutuhkan sebuah id yang unik. 2. Nama, setiap area memiliki nama. Nama digunakan sebagai alat pemanggil objek area tersebut. 3. Map Width, map width adalah nilai dari lebar area 4. Map Height, map height adalah nilai dari panjang atau tinggi area 5. Map Area, map area adalah nilai dari bentuk area yang merepresentasikan area tersebut.
IV.2.4 Entitas-entitas Objek Mati Dalam Nusantara Online, didapatkan kenyataan terdapat objek yang mati. Identifikasi suatu objek mati adalah objek tersebut memiliki fungsi untuk digunakan, diambil, atau dibuang oleh objek hidup. Persamaan yang ada dalam tiga objek ini adalah: 1. IdObjekMati 2. Sifat a. Nama, merupakan alat pemanggil objekmati dalam dunia permainan
IV-8
b. Deskripsi, merupakan beberapa kalimat penjelas objekmati dalam dunia permainan. Deskripsi bisa berupa sejarah, fungsi, atau efek objekmati tersebut. c. Animasi, merupakan representasi visual dari objekmati jika objekmati tersebut digunakan. Animasi bisa dilihat pemain yang memainkan permainan Nusantara Online. Animasi dalam pendefinisiannya dibagi menjadi dua yaitu: i. Nomor animasi, merupakan id dari animasi yang ditimbulkan. Digunakan
untuk
mencari
file
animasi
yang
bisa
merepresentasikan animasi secara visual pada layar komputer. ii. Durasi animasi, merupakan durasi dari animasi yang terjadi. d. Durasi Cooldown, merupakan selang waktu yang dibutuhkan untuk melakukan objek mati itu kembali setelah melakukan objek mati tersebut sebelumnya. e. Image, merupakan nilai dari gambar yang mendefinisikan representasi objek mati pada graphical user interface Nusantara Online. f. Radius Area, merupakan nilai radius dari efek objek mati tersebut. g. Range, merupakan jarak dari objek mati untuk bisa digunakan. h. Sound, merupakan nilai dari audio yang mendefinisikan representasi objek mati. Perbedaan antara tiga objek mati yang paling mendasar adalah: 1. Ability merupakan barang yang menyatu dalam tubuh objek hidup dan digunakan untuk kehidupannya 2. Item merupakan barang yang terpisah dan dibawa oleh objek hidup untuk dimanfaatkan 3. Equipment merupakan barang yang bisa dipakai (sebagai pakaian) dan dilepas oleh mahkluk hidup Entitas-entitas yang merupakan objek hidup adalah:
IV.2.4.1 Ability Ability adalah bentuk yang lebih spesifik dari kemampuan (sub bab III.5.4). Ability adalah representasi dari jurus yang ada dalam permainan Nusantara Online. Jurus bisa digunakan oleh karakter, monster, ataupun NPC. Jurus merupakan objek untuk
IV-9
digunakan ataupun dipelajari. Jika sebuah ability digunakan maka ability akan memberikan efek tertentu pada monster, pemain lain, atau NPC yang terkena ability tersebut. Sekelompok ability memiliki atribut yang sama, yaitu: 1. Tipe ability, merupakan nilai dari tipe ability. 2. IsSpecialAbility, merupakan penanda apakah ability tersebut adalah ability yang special atau tidak. 3. IsOffensive, merupakan penanda apakah ability tersebut digunakan untuk menyerang atau tidak. IV.2.4.2 Item Item adalah salah satu bentuk dari barang seperti yang sudah dijelaskan bagian III.5.3. Item adalah objek benda dalam Nusantara Online yang memiliki banyak kegunaan dalam permainan. Item bisa digunakan oleh karakter, monster, atau NPC. Item bisa didapatkan dari jual beli dengan NPC, bertukar barang dengan pemain lain, memungut dari tanah, dan lain-lain. Jika digunakan item akan memberikan efek tertentu dan mempengaruhi status dari objek lain yang menjadi target. Sekumpulan objek yang disebut entitas item memiliki beberapa atribut yaitu: 1. Stackable, merupakan penanda apakah item tersebut bisa ditumpuk dalam inventory atau tidak. 2. Price, merupakan harga dari item tersebut jika item tersebut dijual kembali ke NPC pedagang. 3. Max Stack, merupakan jumlah maksimum item yang bisa ditumpuk dalam inventory. 4. IsEquipment, merupakan penanda apakah item tersebut juga merupakan equipment atau tidak.
IV.2.4.3 Equipment Sama seperti item, equipment juga merupakan salah satu jenis barang (sub bab III.5.3). Equipment adalah objek benda dalam Nusantara Online yang bersifat sebagai pakaian dalam permainan. Equipment bisa dipakai pada bagian-bagian tubuh oleh karakter, monster, atau NPC. Equipment bisa didapatkan dari jual beli dengan NPC, bertukar barang dengan pemain lain, memungut dari tanah, dan lain-lain. Jika digunakan Equipment akan memberikan efek tertentu dan mempengaruhi status dari
IV-10
objek lain yang memakainya. Sekumpulan objek yang disebut entitas Equipment memiliki beberapa atribut yaitu: 1. Price, merupakan harga dari equipment tersebut jika equipment tersebut dijual kembali ke NPC pedagang. 2. Requirement proficiency, merupakan syarat dari untuk bisa memakai equipment tersebut. Atribut ini berhubungan dengan keterampilan karakter dalam menggunakan jenis equipment tersebut 3. Requirement level, merupakan syarat level karakter untuk dapat memakai equipment tersebut. 4. Durability, merupakan nilai dari ketahanan equipment untuk digunakan selanjutnya. Jika durability mencapai nilai nol maka equipment sudah tidak memberikan efek pada pemakai equipment tersebut. 5. Tipe equip, merupakan nilai dari tipe equipment tersebut. Tipe equipment akan berhubungan dengan tempat equipment tersebut bisa dipakai.
IV.2.5 Quest Quest adalah tugas yang harus diselesaikan oleh karakter untuk mendapatkan bonus barang, reputasi, kemampuan, uang, atau pengalaman. Quest bisa diambil dan diselesaikan oleh karakter. Sekelompok objek yang dinamakan quest memiliki atribut: 1. Id, merupakan atribut pembeda antara quest yang satu dengan quest yang lain. Id bersifat unik. 2. Removeable, merupakan penanda apakah quest tersebut bisa dibuang atau tidak. 3. Tipe, merupakan tipe utama dari quest tersebut. Apakah tipe tersebut quest kill atau quest walk. 4. Requirement, merupakan syarat yang dibutuhkan untuk mengambil quest tersebut. 5. Reward, merupakan hadiah yang akan diberikan ketika karakter berhasil menyelesaikan quest tersebut.
Terdapat dua jenis langkah quest dalam Nusantara Online yang bisa dimiliki oleh quest. Masing-masing jenis langkah quest tersebut memiliki perbedaan: 1. Quest Kill adalah quest yang memiliki perintah untuk membunuh monster 2. Quest Walk adalah quest yang memiliki perintah untuk berjalan ke suatu lokasi
IV-11
IV.2.5.1 Quest Kill Quest Kill adalah salah satu jenis quest yang ada. Quest Kill merepresentasikan sebuah quest yang memiliki target untuk membunuh monster. Sekelompok objek yang disebut quest kill memiliki atribut: 1. Id, merupakan atribut pembeda antara quest kill yang satu dengan quest kill yang lain. Id bersifat unik. 2. Jumlah, merupakan jumlah monster yang harus dibunuh. 3. IdMonster, merupakan id monster yang harus dibunuh.
IV.2.5.2 Quest Walk Quest Walk adalah salah satu jenis dari jenis quest yang ada. Quest Walk merepresentasikan sebuah quest yang memiliki target untuk berjalan ke suatu titik. Sekelompok objek yang disebut quest walk memiliki atribut: 1. Id, merupakan atribut pembeda antara quest walk yang satu dengan quest walk yang lain. Id bersifat unik. 2. PoinX, merupakan poin dalam sumbu x lokasi karakter harus menyelesaikan quest tersebut. 3. PoinY, merupakan poin dalam sumbu y lokasi karakter harus menyelesaikan quest tersebut.
IV.2.6 Inventory Dalam dunia nyata kita sering menggunakan tas sebagai tempat untuk menyimpan barang. Inventory dalam Nusantara Online adalah tempat untuk menyimpan item dan equipment. Sekelompok objek yang disebut sebagai inventory memiliki kesamaan atribut: 1. Id, merupakan atribut pembeda inventory yang satu dengan yang lain 2. Jumlah slot, merupakan jumlah maksimum slot inventory yang bisa diisi dengan item atau equipment.
IV.2.7 Status Modifier Item, ability, dan equipment jika digunakan akan memberikan efek pada sasaran penggunaannya. Status modifier akan bersifat sebagai mesin efek atau mesin
IV-12
pengubah status yang dimiliki oleh item, equipment, atau ability. Sekelompok objek yang digolongkan menjadi status modifier memiliki atribut: 1. Id, merupakan atribut pembeda status modifier yang satu dengan status modifier yang lain. Id bersifat unik. 2. Target, merupakan nilai dari ke objek mana status modifier akan digunakan. 3. HP, merupakan nilai dari status HP yang akan bertambah atau berkurang. 4. MaxHP, merupakan nilai dari status MaxHP yang akan bertambah atau berkurang. 5. MP, merupakan nilai dari status MP yang akan bertambah atau berkurang. 6. MaxMP, merupakan nilai dari status MaxMP yang akan bertambah atau berkurang. 7. STR, merupakan nilai dari status STR yang akan bertambah atau berkurang. 8. VIT, merupakan nilai dari status VIT yang akan bertambah atau berkurang. 9. AGL, merupakan nilai dari status AGL yang akan bertambah atau berkurang. 10. ACC, merupakan nilai dari status ACC yang akan bertambah atau berkurang. 11. INTE, merupakan nilai dari status INTE yang akan bertambah atau berkurang. 12. MEN, merupakan nilai dari status MEN yang akan bertambah atau berkurang. 13. STA, merupakan nilai dari status STA yang akan bertambah atau berkurang. 14. LUC, merupakan nilai dari status LUC yang akan bertambah atau berkurang. 15. Speed, merupakan nilai dari status speed yang akan bertambah atau berkurang. 16. Duration, merupakan nilai dari status duration yang akan bertambah atau berkurang. 17. Tipe, merupakan tipe dari status modifier 18. Reversible, merupakan penanda apakah setelah status modifier ini tidak aktif lagi status objek akan kembali ke asal atau tidak. 19. Active, merupakan penanda apakah status modifier ini sedang dalam kondisi aktif atau tidak.
IV.3 Identifikasi Hubungan antar Entitas Dalam membentuk model data konseptual Nusantara Online, penulis harus mengidentifikasi hubungan antar entitas yang ada dalam Nusantara Online. Hubungan antar entitas yang ada dalam pemodelan data Nusantara Online ini diharapkan mempermudah penulis dalam merancang ERD. Dalam identifikasi hubungan antar
IV-13
entitas ini juga akan dilakukan proses mapping cardinalities. Berikut adalah hubungan antar entitas yang ada dalam Nusantara Online. 1. Player memiliki beberapa karakter, satu karakter hanya bisa dimiliki satu player 2. Setiap objek hidup memiliki sebuah inventory, satu inventory hanya bisa dimiliki oleh satu objek hidup. 3. Setiap objek hidup memiliki beberapa ability, satu ability bisa dimiliki banyak objek hidup. 4. Setiap objek hidup memiliki beberapa equipment, satu equipment bisa dimiliki banyak objek hidup 5. Karakter memiliki beberapa quest, satu quest bisa dimiliki banyak karakter 6. NPC memiliki beberapa quest, satu quest hanya bisa dimiliki satu NPC 7. Inventory memiliki beberapa item, satu item bisa dimiliki banyak inventory 8. Objekmati memiliki beberapa statusmodifier, satu statusmodifier bisa dimiliki banyak objekmati 9. Quest memiliki beberapa quest walk, satu quest walk hanya bisa dimiliki oleh satu quest 10. Quest memiliki beberapa quest kill, satu quest kill hanya bisa dimiliki oleh satu quest
IV.4 Identifikasi Kunci untuk Entitas Dalam membuat model konseptual, kunci untuk setiap entitas harus ditentukan. Secara konsep, setiap entitas individu adalah unik. Perbedaan antar entitas tersebut diekspresikan lewat atribut-atribut yang mereka miliki. Tidak diperbolehkan terdapat dua entitas individu dalam suatu kumpulan entitas memiliki nilai yang sama untuk semua atribut. Setelah mendapatkan entitas-entitas dalam Nusantara Online, akan dicari atribut kunci untuk masing-masing entitas. Atribut-atribut kunci tersebut adalah: 1. Id untuk entitas player 2. Id untuk entitas objek hidup 3. Id untuk entitas objek mati 4. Id untuk entitas area 5. Id untuk entitas quest
IV-14
6. Id untuk entitas quest kill 7. Id untuk entitas quest walk 8. Id untuk entitas inventory 9. Id untuk entitas status modifier
IV.5 Model Data Konseptual Mengacu pada tinjauan teori pada sub bab II.2 mengenai pemodelan data, model data konseptual menggambarkan semantik dari domain yang menjadi cakupan dari model data. Pada kasus ini, domain akan disejajarkan sebagai entitas dan hubungan antar entitas yang menghubungkannya. Dengan menggunakan acuan pada sub bab sebelumnya yaitu sub bab IV.3 tentang identifikasi entitas, sub bab IV.4 tentang identifikasi relasi, dan sub bab IV.5 tentang identifikasi kunci entitas maka model data konseptual akan dirancang.
Perancangan Entity Relationship Diagram (ERD) Bentuk pemodelan data konseptual yang dipilih adalah dengan cara ERD. Jika digambarkan menjadi ERD maka entitas serta hubungan yang ada akan membetuk sebuah diagram seperti di bawah ini (Skema ERD tidak memunculkan atribut-atribut bukan kunci):
Gambar IV-2 Entity Relational Diagram
IV-15
IV.6 Model Data Logis Model data logis adalah model hasil penurunan dari model data konseptual.Dengan mengacu pada pembuatan model data konseptual bagian IV.6 didapatkan suatu model data logis dalam bentuk tabel dan kolom. Model data logis akan dijelaskan melalui sub bab yang tergabung dalam subab IV.7.1
Dari skema konseptual didapatkan beberapa relasi, yaitu: 1. Player 2. Objek Hidup (generalisasi) a. Karakter (spesialisasi) b. Monster (spesialisasi) c. NPC (spesialisasi) 3. Objek Mati a. Ability (spesialisasi) b. Item (spesialisasi) c. Equipment (spesialisasi) 4. Area 5. Quest 6. QuestKill 7. QuestWalk 8. Inventory 9. Statusmodifier 10. Karakter memiliki Quest 11. Objekhidup_Ability 12. Objek hidup_Inventory 13. Objek hidup_ Equipment 14. Objek mati_ Statusmodifier 15. Inventory_ Item
Terdapat dua buah proses generalisasi yaitu objek hidup dan objek mati. Kedua generalisasi tersebut memiliki constraint yaitu: disjoint dan total generalization. Arti dari masing-masing constraint ini adalah: IV-16
IV-17
1. Disjoint, satu entitas harus merupakan satu betuk entitas hasil spesialisasi (tidak boleh lebih dari satu). 2. Total generalization, setiap entitas yang ada harus termasuk atau merupakan entitas di level bawah. Dengan mengambil constraint tersebut bisa disimpulkan untuk menghapuskan entitas-entitas superclass dan mengirimkan relationship yang ada ke hasil dari spesialisasinya.
IV.6.1 Representasi Skema Relasi Hasil transformasi ERD menjadi skema relasi adalah sebagai berikut: 1. Player = {idPlayer, nama, email, password} 2. Objekhidup = {idobjekhidup, status, bodyequipment, idarea, posx, posy, idkingdom} 3. Karakter = {idobjekhidup, idplayer, indeks, nama, level, head, body, leg, hand, hair, pengalaman} 4. Monster = {idobjekhidup, idquestkill, nama, level, body} 5. Npc = {idobjekhidup, tipenpc} 6. Objekmati = {idobjekmati, sifat} 7. Ability = {idobjekmati, tipeability, isspecialability, isoffensive} 8. Item = {idobjekmati, stackable, price, maxstack, isequipment} 9. Equipment = {idobjekmati, price, requirementproficieny, requirementlevel, durability, tipeequip} 10. Area = {idarea, nama, mapwidth, mapheight, maparea} 11. Quest = {idquest, idnpc, removeable, tipe, requirement, reward} 12. QuestKill = {idquestkill, idquest, jumlah, idmonster} 13. QuestWalk = {idquestwalk, idquest, poinX, poinY, idarea} 14. Inventory = {idinventory, jumlahslot} 15. Statusmodifier = {idstatusmodifier, target, hp, mp, maxhp, maxmp, str, vit, agl, acc, inte, men, sta, luc, speed, duration, tipe, reversible, active} 16. Karakter_ quest = {idobjekhidup, idquest} 17. Objekhidup_ability = { idobjekhidup, idobjekmati} 18. Objekhidup_inventory = { idobjekhidup, idinventory} 19. Objekhidup_equipment = {idobjekhidup, idobjekmati}
IV-18
20. Objekmati_statusmodifier = {idobjekmati, idstatusmodifier} 21. Inventory_Item = {idinventory, idobjekmati, idslot, jumlah}
Hal yang harus dilakukan dalam membentuk skema relasi yang siap untuk dinormalisasi adalah membuat semua atribut dalam tabel menjadi atomik. Dalam tabel-tabel Nusantara Online terdapat beberapa atribut yang tidak atomik yaitu status, body_equipment, dan sifat. Status dan body_equipment digunakan pada characters, monster, dan npc. Sifat terdapat pada ability, item, dan equipment.
Status dan Bodyequipment pada Objekhidup Skema awal : Objekhidup = {idobjekhidup, idarea, status, bodyequipment, posx, posy, idkingdom} Status dan bodyequipment merupakan atribut multivalue yang berisi banyak atribut isi. Solusi yang diambil untuk menyelesaikan masalah status dan bodyequipment adalah membagi relasi Objekhidup menjadi: Objekhidup_status = {idobjekhidup, HP, MP, maxhp, maxmp, regenhp, regenMP, def, magicdef, attspeed, str, vit, agg, acc, inte, men, sta, luc} Objekhidup_bodyequipment
=
{idobjekhidup,
righthandequip,
lefthadequip,
headequip, bodyequip, legequip, accessory1, accessory2, accessory3} Objekhidup = {idobjekhidup, idarea, posx, posy, idkingdom}
Sifat pada Objekmati Skema awal: Objekmati = {idobjekmati, sifat} Sifat merupakan atribut multivalue yang berisi banyak atribut isi. Solusi yang diambil untuk menyelesaikan masalah sifat adalah merubah relasi Objekmati menjadi: Objekmati = {idObjekmati, nama, deskripsi, nomoranimasi, durasicooldown, image, radiusarea, range, sound}
IV.6.2 Normalisasi Tabel Langkah normalisasi dilakukan setelah menyelesaikan diagram ERD. Pada sub bab ini akan dibahas functional dependency yang ada dan bentuk normalnya. Adapun
IV-19
bentuk normal akhir yang akan dibentuk pada bagian ini adalah bentuk normal dalam derajat BCNF. Sub bab normalisasi tabel ini akan dibagi lagi menjadi dua sub bab yaitu sub bab functional dependency dan hasil normalisasi.
IV.6.2.1 Functional Dependency Dalam sub bab ini akan diidentifikasi semua functional dependency yang ada dalam model data Nusantara Online. Bentuk functional dependensi yang digunakan adalah functional depedency yang minimal. Bentuk minimal yang digunakan menggunakan canonical cover. Proses pencarian kodisi canonical cover menggunakan metode union dan pengecekan atribut ekstra. Suatu A dinyatakan sebagai atribut ekstra jika: 1. A adalah atribut ekstra di a jika F = (F –{aÆb}) U {(a - A) Æ b} 2. A adalah atribut ekstra b jika F = (F –{aÆb}) U {a Æ (b –A)}
Player Player = {idplayer, name, email, password} Definisi awal FD F1 = {idplayer Æ name, idplayer Æ email, idplayer Æ password} Langkah 1.1 Union: F1 = {idplayer Æ name, email, password} Langkah 1.2 Pengujian atribut name F1’ = {idplayer Æ email, password} (Idplayer)+ = {email, password} Maka atribut name bukan atribut ekstra. Himpunan FD tidak berubah. Dengan cara yang sama dengan langkah 1.2 maka password juga bukan merupakan atribut ekstra. F1 = {idplayer Æ name, email, password} Himpunan FD tidak berubah
Objekhidup Objekhidup_area = {idobjekhidup, idarea, posx, posy, idkingdom} Definisi awal FD: F2 = {idobjekhidup Æ idarea, idobjekhidup Æ posx, idobjekhidup Æ posy, idobjekhidup Æ idkingdom}
IV-20
Langkah 1.1 Union: F2 = {idobjekhidup Æ idarea, posx, posy, idkingdom} Langkah 1.2 Pengujian idarea: Foreign key hanya di-determine oleh primary key, tidak oleh yang lain. Characters_idcharacters bukan atribut ekstra. Himpunan FD tidak berubah. Langkah 2.1 Union: Himpunan FD tidak berubah Langkah 2.2 Pengujian posx: F2’ = {idobjekhidup Æ idarea, posy, idkingdom} (Idobjekhidup)+ = idaream posy, idkingdom Maka atribut posx bukan atribut ekstra. Himpunan FD tidak berubah. Dengan cara yang sama dengan langkah 2.2 maka atribut posy dan idkingdom adalah bukan atribut ekstra sehingga himpunan FD tidak berubah. F2 = {idobjekhidup Æ idarea, posx, posy, idkingdom} Himpunan FD sudah dalam bentuk canonical cover
Objekhidup_status Objekhidup_status = (idobjekhidup, hp, maxhp, mp, maxmp, regenhp, def, magicdef, attspeed, str, vit, agi, acc, inte, men, sta, luc) Definisi awal FD: F3 = {idobjekhidup Æ hp, idobjekhidup Æ mp, idobjekhidup Æ maxhp, idobjekhidup Æ maxmp, ...} Langkah 1.1 Union: F3 = { idobjekhidup Æ hp, mp, maxhp, maxmp, ...} Langkah 1.2 Pengujian atribut hp: F3’ = { idobjekhidup Æmp, maxhp, maxmp, ...} (idobjekhidup)+ = mp, maxhp, maxmp, ... Maka atribut hp bukan atribut ekstra. Himpunan FD tidak berubah. Dengan cara yang sama dengan langkah 2.2 maka atribut maxhp, mp, maxmp, regenhp, def, magicdef, attspeed, str, vit, agi, acc, inte, men, sta, dan luc adalah bukan atribut ekstra sehingga himpunan FD tidak berubah.
IV-21 F3 = { idobjekhidup Æ hp, maxhp, mp, maxmp, regenhp, def, magicdef, attspeed, str, vit, agi, acc, inte, men, sta, luc} Himpunan FD sudah dalam bentuk canonical cover
Objekhidup_bodyequipment Objekhidup_status = (idobjekhidup, righthandequip, lefthadequip, headequip, bodyequip, legequip, accessory1, accessory2, accessory3) Definisi awal FD: F4 = {idobjekhidup Æ righthandequip, idobjekhidup Æ lefthadequip, idobjekhidup Æ headequip, idobjekhidup Æ bodyequip, idobjekhidup Æ legequip, idobjekhidup Æ accessory1, idobjekhidup Æ accessory2, idobjekhidup Æ accessory3} Langkah 1.1 Union: F4 = { idobjekhidup Æ righthandequip, lefthadequip, headequip, bodyequip, legequip, accessory1, accessory2, accessory3} Langkah 1.2 Pengujian atribut hp: F4’ = { idobjekhidup Æ lefthadequip, headequip, bodyequip, legequip, accessory1, accessory2, accessory3} (idobjekhidup)+ = lefthadequip, headequip, bodyequip, legequip, accessory1, accessory2, accessory3 Maka atribut righthandequip bukan atribut ekstra. Himpunan FD tidak berubah. Dengan cara yang sama dengan langkah 2.2 maka atribut lefthadequip, headequip, bodyequip, legequip, accessory1, accessory2, dan accessory3 adalah bukan atribut ekstra sehingga himpunan FD tidak berubah. F4 = { idobjekhidup Æ righthandequip, lefthadequip, headequip, bodyequip, legequip, accessory1, accessory2, accessory3} Himpunan FD sudah dalam bentuk canonical cover
Karakter Karakter = (idobjekhidup, idplayer, indeks, nama, level, head, body, leg, hand, hair, pengalaman) Definisi awal FD:
IV-22 F5 = { idobjekhidup Æ idplayer, idobjekhidup Æ indeks, nama, idobjekhidup Æ level, idobjekhidup Æ head, idobjekhidup Æ body, idobjekhidup Æ leg, idobjekhidup Æ hand, idobjekhidup Æ hair, idobjekhidup Æ pengalaman } Langkah 1.1 Union: F5 = { idobjekhidup Æ idplayer, indeks, nama, level, head, body, leg, hand, hair, pengalaman} Langkah 1.2 Pengujian atribut idplayer: Foreign key hanya di-determine oleh primary key, tidak oleh yang lain. idplayer bukan atribut ekstra. Himpunan FD tidak berubah. Langkah 2.1 Union: Himpunan FD tidak berubah Langkah 2.2 Pengujian atribut nama: F5’ = { idobjekhidup Æ idplayer, indeks, level, head, body, leg, hand, hair, pengalaman } (idobjekhidup)+ = idplayer, indeks, level, head, body, leg, hand, hair, pengalaman Maka atribut nama buka atribut ekstra. Himpunan FD tidak berubah. Dengan cara yang sama dengan langkah 2.2 maka atribut indeks, level, head, body, leg, hand, hair, pengalaman adalah bukan atribut ekstra sehingga himpunan FD tidak berubah. F5 = { idobjekhidup Æ idplayer, indeks, nama, level, head, body, leg, hand, hair, pengalaman} Himpunan FD sudah dalam bentuk canonical cover
Monster Monster = (idobjekhidup, idquestkill, nama, level, body) Definisi awal FD: F6 = { idobjekhidup Æ idquestkill, idobjekhidup Æ nama, nama, idobjekhidup Æ level, idobjekhidup Æ body } Langkah 1.1 Union: F6 = { idobjekhidup Æ idquestkill, nama, level, body } Langkah 1.2 Pengujian atribut idquestkill: Foreign key hanya di-determine oleh primary key, tidak oleh yang lain. idquestkill bukan atribut ekstra. Himpunan FD tidak berubah. Langkah 2.1 Union:
IV-23
Himpunan FD tidak berubah Langkah 2.2 Pengujian atribut nama: F6’ = { idobjekhidup Æ idquestkill, level, body } (idobjekhidup)+ idquestkill, level, body Maka atribut nama bukan atribut ekstra. Himpunan FD tidak berubah. Dengan cara yang sama dengan langkah 2.2 maka atribut idquestkill, level, body adalah bukan atribut ekstra sehingga himpunan FD tidak berubah. F6 = { idobjekhidup Æ idquestkill, nama, level, body } Himpunan FD sudah dalam bentuk canonical cover
NPC Monster = (idobjekhidup, tipenpc) Definisi awal FD: F7 = { idobjekhidup Æ tipenpc } Langkah 1.1 Union: Langkah 1.2 Pengujian atribut tipenpc: F7’ = { idobjekhidup Æ } (idobjekhidup)+ Maka atribut tipenpc bukan atribut ekstra. Himpunan FD tidak berubah. F7 = { idobjekhidup Æ tipenpc } Himpunan FD sudah dalam bentuk canonical cover
Area Area = {idarea, width, height, map} Definisi awal FD: F8 = {idarea Æ width, idarea Æ height, idarea Æ map} Langkah 1.1 Union: F8 = {idarea Æ width, height, map} Langkah 1.2 Pengujian atribut width F8’ = {idarea Æ height, map} (Idarea)+ = {height, map}
IV-24
Maka atribut width bukan atribut ekstra. Himpunan FD tidak berubah. Dengan cara yang sama dengan langkah 1.2 maka height dan map adalah bukan merupakan atribut ekstra. F8 = {idarea Æ width, height, map} Himpunan FD tidak berubah
Objekmati Objekmati = (idObjekmati, nama, deskripsi, nomoranimasi, durasicooldown, image, radiusarea, range, sound) Definisi awal FD: F9 = { idObjekmati Æ nama, idObjekmati Æ deskripsi, idObjekmati Æ nomoranimasi, idObjekmati Æ durasicooldown, idObjekmati Æ image, idObjekmati Æ radiusarea, idObjekmati Æ range, idObjekmati Æ sound } Langkah 1.1 Union: F9 = { idObjekmati Æ nama, deskripsi, nomoranimasi, durasicooldown, image, radiusarea, range, sound } Langkah 1.2 Pengujian atribut nama F9’ = { idObjekmati Æ deskripsi, nomoranimasi, durasicooldown, image, radiusarea, range, sound } (Idarea)+ = {deskripsi, nomoranimasi, durasicooldown, image, radiusarea, range, sound} Maka atribut nama bukan atribut ekstra. Himpunan FD tidak berubah. Dengan cara yang sama dengan langkah 1.2 maka deskripsi, nomoranimasi, durasicooldown, image, radiusarea, range, dan sound adalah bukan merupakan atribut ekstra. F9 = { idObjekmati Æ nama, deskripsi, nomoranimasi, durasicooldown, image, radiusarea, range, sound } Himpunan FD tidak berubah
Item Item = (idobjekmati, stackable, price, maxstack, isequipment) Definisi awal FD:
IV-25 F10 = { idobjekmati Æ stackable, idobjekmati Æ price, idobjekmati Æ maxstack, idobjekmati Æ isequipment } Langkah 1.1 Union: F10 = { idobjekmati Æ stackable, price, maxstack, isequipment} Langkah 1.2 Pengujian atribut stackable: F10’ = {idobjekmati Æ price, maxstack, isequipment } (idobjekmati)+ = price, maxstack, isequipment Maka atribut stackable bukan atribut ekstra. Himpunan FD tidak berubah. Dengan cara yang sama dengan langkah 1.2 maka atribut price, maxstack, isequipment adalah bukan atribut ekstra sehingga himpunan FD tidak berubah. F10 = { idobjekmati Æ stackable, price, maxstack, isequipment} Himpunan FD sudah dalam bentuk canonical cover
Ability Ability = (idobjekmati, tipeability, isspecialability, isoffensive) Definisi awal FD: F11 = { idobjekmati Æ tipeability, idobjekmati Æ isspecialability, idobjekmati Æ isoffensive } Langkah 1.1 Union: F11 = { idobjekmati Æ tipeability, isspecialability, isoffensive } Langkah 1.2 Pengujian atribut tipeability: F11’ = {idobjekmati Æ isspecialability, isoffensive } (idobjekmati)+ = isspecialability, isoffensive Maka atribut tipeability bukan atribut ekstra. Himpunan FD tidak berubah. Dengan cara yang sama dengan langkah 1.2 maka atribut isspecialability, isoffensive adalah bukan atribut ekstra sehingga himpunan FD tidak berubah. F11 = { idobjekmati Æ tipeability, isspecialability, isoffensive } Himpunan FD sudah dalam bentuk canonical cover
Equipment Equipment = (idobjekmati, price, requirementproficieny, requirementlevel, durability, tipeequip) Definisi awal FD:
IV-26 F12 = { idobjekmati Æ price, idobjekmati Æ requirementproficieny, idobjekmati Æ requirementlevel, idobjekmati Æ durability, idobjekmati Æ tipeequip } Langkah 1.1 Union: F12 = { idobjekmati Æ price, requirementproficieny, requirementlevel, durability, tipeequip } Langkah 1.2 Pengujian atribut price: F12’ = {idobjekmati Æ requirementproficieny, requirementlevel, durability, tipeequip} (idobjekmati)+ = requirementproficieny, requirementlevel, durability, tipeequip Maka atribut price bukan atribut ekstra. Himpunan FD tidak berubah. Dengan cara yang sama dengan langkah 1.2 maka atribut requirementproficieny, requirementlevel, durability, tipeequip adalah bukan atribut ekstra sehingga himpunan FD tidak berubah. F12 = { idobjekmati Æ price, requirementproficieny, requirementlevel, durability, tipeequip } Himpunan FD sudah dalam bentuk canonical cover
Quest Quest = (idquest, idnpc, removeable, tipe, requirement, reward) Definisi awal FD: F13 = {idquest Æ idnpc, idquest Æ removeaable, idquest Æ tipe, idquest Æ requirement, idquest Æ reward} Langkah 1.1 Union: F13 = {idquest Æ idnpc, removeable, tipe, requirement, reward } Langkah 1.2 Pengujian atribut idnpc: Foreign key hanya di-determine oleh primary key, tidak oleh yang lain. idnpc bukan atribut ekstra. Himpunan FD tidak berubah. Langkah 2.1 Union: Himpunan FD tidak berubah Langkah 2.2 Pengujian atribut removeable: F13’ = {idquest Æ idnpc, tipe, requirement, reward} (Idquest)+ = idnpc, tipe, requirement,reward
IV-27
Maka atribut removeable bukan atribut ekstra. Himpunan FD tidak berubah. Dengan cara yang sama dengan langkah 2.2 maka atribut tipe, requirement, reward adalah bukan atribut ekstra sehingga himpunan FD tidak berubah. F13 = {idquest Æ idnpc, removeaable, tipe, requirement, reward} Himpunan FD sudah dalam bentuk canonical cover
Quest_Kill Quest_Kill = {idquest_kill, idquest, count, monster_idmonster} Definisi awal FD: F14
=
{
idquest_kill
Æ
idquest,
idquest_kill
Æcount,
idquest_kill
Æmonster_idmonster } Langkah 1.1 Union: F14 = { idquest_kill Æ idquest, count, idobjekhidup} Langkah 1.2 Pengujian count: F14’ = { idquest_kill Æ idquest, idobjekhidup } (idquest_kill)+ = idquest, idobjekhidup. Maka atribut count bukan atribut ekstra. Himpunan FD tidak berubah. Langkah 2.1 Union: Himpunan FD tidak berubah. Langkah 2.2 Pengujian idquest, idobjekhidup Foreign key hanya di-determine oleh primary key, tidak oleh yang lain. idquest, idobjekhidup bukan atribut ekstra. Himpunan FD tidak berubah. F14 = { idquest_kill Æ idquest, count, idobjekhidup} Himpunan FD sudah dalam bentuk canonical cover
Quest_Walk Quest_Walk = {idquest_walk, idarea, idquest, pointX, pointY} Definisi awal FD: F15 = { idquest_walk Æ idarea, idquest_walk Æ idquest, idquest_walk Æ pointX, idquest_walk Æ pointY } Langkah 1.1 Union: F15 = { idquest_walk Æ idarea, idquest, pointX, pointY } Langkah 1.2 Pengujian pointX:
IV-28
F15’ = { idquest_walkÆ idarea, idquest, pointY} (idquest_walk)+ = idarea, idquest, pointY. Maka atribut count bukan atribut ekstra. Himpunan FD tidak berubah. Langkah 2.1 Union: Himpunan FD tidak berubah. Langkah 2.2 Pengujian quest idarea, idquest Foreign key hanya di-determine oleh primary key, tidak oleh yang lain. idarea, idquest bukan atribut ekstra. Himpunan FD tidak berubah. F15 = {idquest_walk Æ idarea, idquest, pointX, pointY} Himpunan FD sudah dalam bentuk canonical cover
Inventory Inventory = {idinventory ,jumlahslot} Definisi awal FD: F16 = { idinventory Æ jumlahslot } Langkah 1.1 Union: F16 = {idinventory Æ jumlahslot} Langkah 1.2 Pengujian atribut jumlahslot: F16’ = {idinventory Æ } (idinventory)+ = Maka jumlah slot adalah bukan atribut ekstra sehingga himpunan FD tidak berubah. F16 = {idinventory Æ characters_idcharacters,count} Himpunan FD sudah dalam bentuk canonical cover
Statusmodifier Statusmodifier = { idstatusmodifier, target, hp, mp, maxhp, maxmp, str, vit, agl, acc, intel, men, sta, luc, speed, duration, tipe, reversible, active, self} Definisi awal FD: F17 = {idstatusmodifier Æ target, idstatusmodifier Æ hp, idstatusmodifier Æ mp, idstatusmodifier Æ maxhp, idstatusmodifier Æ maxmp. idstatusmodifier Æ str, idstatusmodifier Æ vit, idstatusmodifier Æ agl, idstatusmodifier Æ intel, ...} Langkah 1.1 Union:
idstatusmodifier Æ acc,
IV-29 F17 = { idstatusmodifier Æ target, hp, mp, maxhp, maxmp, str, vit, agl, acc, intel, men, sta, luc, speed, duration, tipe, reversible, active, self } Langkah 1.2 Pengujian atribut target: F17’ = { idstatusmodifier Æ hp, mp, maxhp, maxmp, str, vit, agl, acc, intel, men, sta, luc, speed, duration, tipe, reversible, active, self} (idstatusmodifier)+ = hp, mp, maxhp, maxmp, str, vit, agl, acc, intel, men, sta, luc, speed, duration, tipe, reversible, active, self. Maka atribut target bukan atribut ekstra. Himpunan FD tidak berubah. Dengan cara yang sama dengan langkah 1.2 maka atribut hp, mp, maxhp, maxmp, str, vit, agl, acc, intel, men, sta, luc, speed, duration, tipe, reversible, active, self adalah bukan atribut ekstra sehingga himpunan FD tidak berubah. F17 = { idstatusmodifier Æ target, hp, mp, maxhp, maxmp, str, vit, agl, acc, intel, men, sta, luc, speed, duration, tipe, reversible, active, self} Himpunan FD sudah dalam bentuk canonical cover
Karakter_Quest Karakter_quest = { idobjekhidup, idquest } Definisi awal FD: F18 = { idobjekhidup, idquest Æ idobjekhidup, idquest}. Langkah 1.1 Union: Himpunan FD tidak berubah Langkah 1.2 Pengujian idobjekhidup dan idquest: Kedua atribut tersebut merupakan primary key. Idobjekhidup dan idquest bukan atribut ekstra. Himpunan FD tidak berubah.
Objekhidup_Ability Objekhidup_Ability = {idobjekmati, idobjekhidup} Definisi awal FD: F19 = {idobjekmati, idobjekhidup Æ idobjekmati, idobjekhidup} Langkah 1.1 Union: Himpunan FD tidak berubah. Langkah 1.2 Pengujian idobjekmati, idobjekhidup
IV-30
Kedua atribut tersebut merupakan primary key. Idobjekhidup dan idobjekmati bukan atribut ekstra. Himpunan FD tidak berubah.
Objekhidup_Equipment Objekhidup_Equipment = {idobjekmati, idobjekhidup} Definisi awal FD: F20 = {idobjekmati, idobjekhidup Æ idobjekmati, idobjekhidup} Langkah 1.1 Union: Himpunan FD tidak berubah. Langkah 1.2 Pengujian idobjekmati, idobjekhidup Kedua atribut tersebut merupakan primary key. Idobjekhidup dan idobjekmati bukan atribut ekstra. Himpunan FD tidak berubah.
Objekhidup_Inventory Objekhidup_Inventory = {idinventory, idobjekhidup} Definisi awal FD: F21 = { idinventory, idobjekhidup Æ idinventory, idobjekhidup } Langkah 1.1 Union: Himpunan FD tidak berubah. Langkah 1.2 Pengujian idinventory, idobjekhidup Kedua atribut tersebut merupakan primary key. Idobjekhidup dan idinventory bukan atribut ekstra. Himpunan FD tidak berubah.
Objekmati_Statusmodifier Objekmati_Statusmodifier = {idstatusmodifier, idobjekmati} Definisi awal FD: F22 = {idstatusmodifier, idobjekmati Æ idstatusmodifier, idobjekmati } Langkah 1.1 Union: Himpunan FD tidak berubah. Langkah 1.2 Pengujian idstatusmodifier, idobjekmati Kedua atribut tersebut merupakan primary key. Idobjekmati dan idstatusmodifier bukan atribut ekstra. Himpunan FD tidak berubah.
IV-31
Inventory_Item Inventory_Item = {iditem, idinventory, idslot, jumlah} Definisi awal FD: F23 = { iditem, idinventory Æ idslot, iditem, idinventory Æ jumlah} Langkah 1.1 Union: F23 = { iditem, idinventory Æ idslot, jumlah}. Langkah 1.2 Pengujian iditem, idinventory Foreign key hanya di-determine oleh primary key. Iditem dan idinventory bukan atribut ekstra. Himpunan FD tidak berubah. Langkah 2.1 Union: Hiimpunan FD tidak berubah Langkah 2.2 Pengujian idslot F23’ = { iditem, idinventory Æ iditem, idinventory, jumlah} (idinventory_item)+ = item_iditem, idinventory, jumlah. Maka atribut idslot bukan atribut ekstra. Untuk atribut jumlah juga bisa digunakan cara yang sama sehingga menunjukkan bahwa idslot bukan atribut ekstra juga. Himpunan FD tidak berubah.
IV.6.2.2 Hasil Normalisasi Normalisasi yang dilakukan adalah sampai pada tahap BCNF yang biasanya memenuhi derajat normalisasi 3 NF. Setelah melakukan proses normalisasi, maka didapatkanlah relasi-relasi yang sudah normal. Berikut adalah hasil relasi yang didapatkan setelah melakukan proses normalisasi.
Player F1 = {idplayer Æ name, email, password} Player = {idplayer, name, email, password}
Objekhidup F2 = {idobjekhidup Æ idarea, posx, posy, idkingdom} Objekhidup_area = {idobjekhidup, idarea, posx, posy, idkingdom}
IV-32
Objekhidup_status F3 = { idobjekhidup Æ hp, maxhp, mp, maxmp, regenhp, def, magicdef, attspeed, str, vit, agi, acc, inte, men, sta, luc} Objekhidup_status = (idobjekhidup, hp, maxhp, mp, maxmp, regenhp, def, magicdef, attspeed, str, vit, agi, acc, inte, men, sta, luc)
Objekhidup_bodyequipment F4 = { idobjekhidup Æ righthandequip, lefthadequip, headequip, bodyequip, legequip, accessory1, accessory2, accessory3} Objekhidup_status = (idobjekhidup, righthandequip, lefthadequip, headequip, bodyequip, legequip, accessory1, accessory2, accessory3)
Karakter F5 = {idcharacters Æ idplayer, indeks, nama, level, head, body, leg, hand, hair, pengalaman} Karakter = (idobjekhidup, idplayer, indeks, nama, level, head, body, leg, hand, hair, pengalaman)
Monster F6 = { idobjekhidup Æ idquestkill, nama, level, body } Monster = (idobjekhidup, idquestkill, nama, level, body)
NPC F7 = { idobjekhidup Æ tipenpc } Monster = (idobjekhidup, tipenpc)
Area F8= {idarea Æ width, height, map} Area = {idarea, width, height, map}
Objekmati F9 = { idObjekmati Æ nama, deskripsi, nomoranimasi, durasicooldown, image, radiusarea, range, sound }
IV-33
Objekmati = (idObjekmati, nama, deskripsi, nomoranimasi, durasicooldown, image, radiusarea, range, sound)
Item F10 = { idobjekmati Æ stackable, price, maxstack, isequipment} Item = (idobjekmati, stackable, price, maxstack, isequipment)
Ability F11 = { idobjekmati Æ tipeability, isspecialability, isoffensive } Ability = (idobjekmati, tipeability, isspecialability, isoffensive)
Equipment F12 = { idobjekmati Æ price, requirementproficieny, requirementlevel, durability, tipeequip } Equipment = (idobjekmati, price, requirementproficieny, requirementlevel, durability, tipeequip)
Quest F13 = {idquest Æ idnpc, removeaable, tipe, requirement, reward} Quest = (idquest, idnpc, removeable, tipe, requirement, reward)
Quest_Kill F14 = { idquest_kill Æ idquest, count, idobjekhidup} Quest_Kill = {idquest_kill, idquest, count, idobjekhidup}
Quest_Walk F15 = {idquest_walk Æ idarea, idquest, pointX, pointY} Quest_Walk = {idquest_walk, idarea, idquest, pointX, pointY}
Inventory F16 = {idinventory Æ characters_idcharacters,count} Inventory = {idinventory ,jumlahslot}
IV-34
Statusmodifier F17 = { idstatusmodifier Æ target, hp, mp, maxhp, maxmp, str, vit, agl, acc, intel, men, sta, luc, speed, duration, tipe, reversible, active, self} Statusmodifier = { idstatusmodifier, target, hp, mp, maxhp, maxmp, str, vit, agl, acc, intel, men, sta, luc, speed, duration, tipe, reversible, active, self}
Karakter_Quest F18 = {idobjekhidup, idquest Æ idobjekhidup, idquest} Karakter_quest = { idobjekhidup, idquest }
Objekhidup_Ability F19 = {idobjekmati, idobjekhidup Æ idobjekmati, idobjekhidup} Objekhidup_Ability = {idobjekmati, idobjekhidup}
Objekhidup_Equipment F20 = {idobjekmati, idobjekhidup Æ idobjekmati, idobjekhidup} Objekhidup_Equipment = {idobjekmati, idobjekhidup}
Objekhidup_Inventory F21 = {idinventory, idobjekhidup Æ idinventory, idobjekhidup} Objekhidup_Inventory = {idinventory, idobjekhidup}
Objekmati_Statusmodifier F22 = {idstatusmodifier, idobjekmati Æ idstatusmodifier, idobjekmati} Objekmati_Statusmodifier = {idstatusmodifier, idobjekmati}
Inventory_Item F23 = { iditem, idinventory Æ idslot, jumlah, idinventory iditem } Inventory_Item = { iditem, idinventory, idslot, jumlah}
IV-35
IV.7 Model Data Fisik Model data fisik erat kaitannya dengan cara penyimpanan data pada sistem aplikasi. Pada studi kasus Nusantara, dibutuhkan model data fisik yang sesuai dengan karakteristik permainan MMORPG. Berdasarkan karakteristik permainan MMORPG sebagai sistem aplikasi client-server maka model data juga harus bisa mendukung sistem aplikasi client-server. Model fisik akan menjadi model yang paling dekat dengan struktur dan tipe data yang akan diimplementasi dalam Nusantara Online. Model fisik data akan banyak dipengaruhi dari analisis-analisis yang ada pada bagian bab III terutama bagian sub bab III.2 dan III.3 yaitu mengenai analisis karakteristik fungsional dan non fungsional. Mengacu pada usulan implementasi fisik data pada sub bab III.7, dibutuhkan tempat penyimpanan data pada aplikasi client untuk memenuhi karakteristik non fungsional sehingga menegaskan implementasi model fisik data pada client dan server.
IV.7.1 Pertimbangan Model Fisik Data pada Client dan Server Pertimbangan yang menegaskan pembagian model fisik data pada aplikasi client dan server adalah: 1. Sistem Aplikasi terbagi pada dua sisi yaitu client dan server (sub bab III.2.1), maka dibutuhkan bentuk aplikasi yang berbeda dalam sisi client dan server yang memungkinkan transfer data antar keduanya dengan memanfaatkan model data yang ada. 2. Sistem Aplikasi MMORPG merupakan sistem yang bersifat real-time (sub bab III.3.1), maka dibutuhkan bentuk model data yang bisa memproduksi visualisasi dengan cepat. Denga produksi visualisasi yang cepat akan terbentuk suatu aplikasi real-time. 3. Sistem Aplikasi MMORPG merupakan sistem dengan perubahan data yang tinggi (sub bab III.3.4), maka dibutuhkan suatu model data yang bisa menyeimbangkan antara sifat real-time-nya dengan perubahan data yang tinggi. Model ini harus bisa memilah bentuk data sehingga transfer data akan sekecil mungkin dan secepat mungkin. 4. Sistem Aplikasi MMORPG merupakan sistem dengan tingkat pemrosesan paralel yang tinggi (sub bab III.3.5), maka dibutuhkan model data yang membagi client dan server sehingga pemrosesan tidak hanya terjadi di server tapi juga terjadi di
IV-36
client. Pemrosesan paralel hanya bisa dilakukan jika client memiliki resource juga. Hal ini menegaskan bahwa keperluan pengadaan data pada client adalah strategi yang baik dalam sistem aplikasi MMORPG. 5. Sistem Aplikasi MMORPG merupakan sistem dengan frekuensi akses data yang berbeda (sub bab III.3.6). Hal ini memungkinkan adanya strategi untuk melakukan pembagian data sehingga sistem dapat bekerja dengan lebih efisien. Dengan melihat beberapa objek data yang konstan dalam waktu tertentu memungkinkan implementasi data pada client.Hal ini memungkinkan beberapa bagian data tertentu tidak perlu ditransfer secara berulang tetapi cukup diimplementasikan di client. 6. Proses request (sub bab III.5.4 ) dan retrieve (sub bab III.5.5) mendukung bahwa performansi sistem aplikasi MMORPG bergantung pada data yang ditransfer baik dalam proses request ataupun retrieve, maka dibutuhkan sebuah model data yang bisa mengurangi proses request dan retrieve.
IV.7.2 Skema Model Data Fisik Untuk mengimplementasikan pembagian data, perlu dirancang suatu model data yang bisa menggambarkan model data pada sisi client dan sisi server. Pada sisi client akan disimpan beberapa data hasil replikasi dari data di server sehingga transfer data antara server dan client bisa dimodelkan sebagai berikut:
Gambar IV-3 Replikasi Data pada Server dan Client
Transfer data dari server ke client ataupun sebaliknya hanya diwakili dengan id saja. Setelah data sampai di server atau client, maka data akan diambil lagi dari sebuah
IV-37
tempat data lengkap. Terdapat perbedaan pusat data antara client dan server. Pada client, pusat data disimpan dengan metode file-system. Sedangkan di server, pusat data disimpan dalam basis data. Hal ini disebabkan karena batasan tertentu yang harus dimiliki oleh sistem MMORPG Nusantara, yaitu: 1. Server dengan DBMS a. Harus dapat diakses oleh banyak transaksi b. Harus mudah digunakan oleh administrator c. Reliability yang tinggi 2. Client dengan file-system a. Tidak akan digunakan oleh pemain b. Tidak boleh menyulitkan pemain c. Tidak akan diakses banyak transaksi Implementasi model fisik data dengan lebih detil akan bisa dilihat pada bab selanjutnya yaitu bab implementasi dan pengujian.
Tabel hasil pemetaan dari skema logis yang ada terhadap model fisik data pada client dan server bisa dilihat melalui tabel berikut ini: Tabel IV-1 Pemetaan Skema Relasi pada Client dan Server
Relasi
Server
Client
Player
terimplementasi
tidak terimplementasi
Objekhidup
terimplementasi
tidak terimplementasi
Objekhidup_status
terimplementasi
tidak terimplementasi
Objekhidup_bodyequipment terimplementasi
tidak terimplementasi
Karakter
terimplementasi
tidak terimplementasi
Monster
Terimplementasi
tidak terimplementasi
NPC
Terimplementasi
tidak terimplementasi
Area
Terimplementasi
Terimplementasi
Objekmati
Terimplementasi
tidak terimplementasi
Item
Terimplementasi
Terimplementasi
Ability
Terimplementasi
Terimplementasi
Equipment
Terimplementasi
Terimplementasi
Quest
Terimplementasi
Terimplementasi
IV-38
Relasi
Server
Client
Quest_Kill
Terimplementasi
Terimplementasi
Quest_Walk
Terimplementasi
Terimplementasi
Inventory
Terimplementasi
tidak terimplementasi
Statusmodifier
Terimplementasi
tidak terimplementasi
Karakter_Quest
Terimplementasi
tidak terimplementasi
Objekhidup_Ability
Terimplementasi
tidak terimplementasi
Objekhidup_Equipment
Terimplementasi
tidak terimplementasi
Objekhidup_Inventory
Terimplementasi
tidak terimplementasi
Objekmati_Statusmodifier
Terimplementasi
tidak terimplementasi
Inventory_Item
Terimplementasi
tidak terimplementasi
IV.7.3 Model Data Fisik pada Server Model fisik data pada Server adalah bentuk fisik dari model data logis yang sudah dijelaskan pada sub bab IV.7. Untuk skema model fisik pada server akan tetap menggunakan model data logis dalam sub bab IV.7. Seperti pada table IV.1 di atas, relasi yang akan diimplementaskan pada server adalah semua relasi yang ada pada model logis. Pada server, model fisik akan diimplentasikan dengan menggunakan DBMS. Untuk implementasi yang lebih rinci mengenai model fisik di server akan dijelaskan pada bagian implementasi selanjutnya.
IV.7.4 Model Data Fisik pada Client Model data fisik pada client digunakan untuk merepresentasikan tampilan grafis tanpa harus menunggu. Jika seluruh data dikirimkan dari server ke client maka proses pengiriman akan berjalan dalam waktu yang lama akan menghilangkan aspek permainan real-time pada MMORPG. Secara teknis data pada client akan digunakan untuk membentuk objek utuh yang memiliki seluruh atributnya pada client. Model data fisik pada client merupakan bagian dari model data fisik di server. Sehingga data di client merupakan replikasi dari sebagian data di server. Data yang akan diimplementasikan pada client adalah data yang tidak berubah selama proses permainan.
IV-39
Data pada client terdiri dari data yang berisi relasi: 1. Ability Ability tidak pernah berubah pengaruhnya baik untuk satu karakter atau satu karakter yang lain karena data ability tidak pernah berubah. Ability cukup sering digunakan dalam permainan tetapi untuk melakukan proses pengupdatean atau penyimpanan data ability dibutuhkan kepastian perubahan global terlebih dahulu 2. Item Item tidak pernah berubah pengaruhnya baik untuk satu karakter atau satu karakter yang lain karena data item tidak pernah berubah. Item cukup sering digunakan dalam permainan tetapi untuk melakukan proses pengupdatean atau penyimpanan data item dibutuhkan kepastian perubahan global terlebih dahulu 3. Equipment Equipment merupakan turunan dari item. Equipment merupakan item yang bisa dipakai atau dikenakan di tubuh karakter. Secara praktis, equipment memiliki sifat yang sama dengan item yaitu lembam berubah. 4. Area Area adalah data untuk representasi visualisasi dunia permainan pada client. Data area untuk jangka waktu tertentu seharusnya tidak akan mengalami perubahan. Data area akan berubah ketika versi baru dari game akan keluar. 5. Quest Quest adalah data untuk representasi scenario tugas yang ada dalam permainan. Quest akan bisa berubah atau terupdate ketika versi baru game akan keluar. 6. Quest_Kill Quest_Kill adalah data untuk representasi scenario quest untuk membunuh monster. Quest_Kill akan diakses oleh quest untuk merepresentasikan satu bentuk quest yang utuh 7. Quest_Walk Quest_Kill adalah data untuk representasi scenario quest untuk membunuh monster. Quest_Kill akan diakses oleh quest untuk merepresentasikan satu bentuk quest yang utuh Pada client, skema basis data bisa dimodelkan seperti pada gambar IV.3 bagian kanan client. Skema yang ada cukup sederhana. Skema sederhana ini mendukung kemudahan implementasi data dengan menggunakan file-system.
IV-40
IV.7.5 Transfer Data dalam Sinkronisasi Model Data Fisik antara Server dan Client Dalam permainan MMORPG, data aksi yang dilakukan dalam aplikasi client harus sinkron dengan data yang berubah atau terdapat pada aplikasi server. Transfer data antara aplikasi client dan server harus siap digunakan aplikasi baik di client maupun di server untuk dirubah menjadi objek utuhnya ataupun diambil sebagian sesuai dengan kebutuhan aplikasi. Transfer data dalam sinkronisasi model data fisik clientserver terlihat lebih jelas dengan tabel di bawah ini: Tabel IV-2 Transfer Data dalam Sinkronisasi model data fisik client-server
Jenis Tranfer Data Id
dari
setiap
Arah Pengiriman ability, Server ke Client
equipment, item, quest, quest
Waktu Pengiriman Karakter masuk dalam dunia permainan
kill, dan quest walk yang dimiliki karakter Id dari area tempat lokasi Server ke Client
Karakter masuk dalam dunia
pemain berada
permainan
Id dari ability, equipment, atau Client ke Server
1. Karakter menggunakan item, ability, atau item
item yang digunakan
2. Karakter membuang item, ability, atau item 3. Karakter membeli equipment 4. Karakter ability baru Id dari quest, quest kill, atau Client ke Server quest walk
item,
mempelajari
1. Karakter mengambil quest, quest kill, atau quest walk 2. Karakter membuang quest, quest kill, atau quest walk 3. Karakter menyelesaikan quest, quest kill, atau quest walk
IV-41
Jenis Tranfer Data
Arah Pengiriman
Waktu Pengiriman
Id dari area tempat lokasi Client ke Server
Karakter berpindah ke lokasi
pemain berpindah
yang berbeda