我正在制作一款轻型RPG游戏,其中角色可以装备武器,装甲和2个配件插槽。这是一个可能的解决方案:
equipped_equipment(<characterid>, <equipmentid>, <slotid>)
slot(<slotid>, slotname)
equipment(<equipmentid>, equipment_name, equipment_script_name)
所以,为了找出角色装备的武器,我可以做到
SELECT equipmentid, equipment_name FROM equipment e, equipped_equipment eq
WHERE e.equipmentid = eq.equipmentid AND eq.slotid = 'weapon' AND
eq.characterid = 1
但是这与这样的架构相比如何?
equipment (<characterid>, weapon_slot, armor_slot, accessory1_sot, accessory2_slot)
当然,使用上面的三个表(有些规范化 - 我可能将设备名称分开并放入equipment_details表或某种类型)它允许我
但是第二个非标准化解决方案允许我通过一个查询获取所有设备的ID,而添加新插槽只是添加一个新列。从长远来看哪一个更好?欢迎提出建议和改进!
答案 0 :(得分:5)
这有很多骗局,我会让其他人找到它们: - )
我认为合理的道路是:
这样做的原因是修复数据损坏,重复或不一致错误很难,有时甚至是不可能的,所以尽量努力通过规范化获得正确的性能。只有这样,如果你已经证明了,你就无法获得理想的性能,那就试试非规范化,只需要进行非规范化。