Database design 数据库设计:规范化还是不规范化

Database design 数据库设计:规范化还是不规范化,database-design,Database Design,我正在创建一个轻RPG游戏,其中一个角色可以装备一件武器、一件盔甲和两个配件槽。这里有一个可能的解决方案: equipped_equipment(<characterid>, <equipmentid>, <slotid>) slot(<slotid>, slotname) equipment(<equipmentid>, equipment_name, equipment_script_name) 但这与这样的模式相比又如何呢 eq

我正在创建一个轻RPG游戏,其中一个角色可以装备一件武器、一件盔甲和两个配件槽。这里有一个可能的解决方案:

equipped_equipment(<characterid>, <equipmentid>, <slotid>)
slot(<slotid>, slotname)
equipment(<equipmentid>, equipment_name, equipment_script_name)
但这与这样的模式相比又如何呢

equipment (<characterid>, weapon_slot, armor_slot, accessory1_sot, accessory2_slot)
装备(、武器槽、装甲槽、附件1、附件2)
当然,使用上面的三个表(这是有点规范化的-我可能会分离出设备名称并放入设备详细信息表或某种类型),它允许我

  • 轻松添加新插槽
  • 避免空白条目 (…我可能遗漏的任何其他内容)

  • 但是第二个非规范化的解决方案允许我通过一个查询获得所有设备的ID,添加一个新插槽只是添加一个新列。从长远来看,哪一个更好?欢迎提出建议和改进

    这件事有很多麻烦,我会让其他人找到的:-)

    我认为一条合理的道路是:

    • 有一个规范化的数据库
    • 创建非规范化视图
    • 编写应用程序以查询这些视图
    • 个人资料(拥有大量客户)
    • 如果数据库确实是一个瓶颈,那么更难确定哪些表涉及其中,然后优化数据库(索引、查询计划等)
    • 再次配置文件
    • 如果db仍然是一个瓶颈,那么您可以对视图的界面进行非规范化(这样您就不必更改应用程序)

    这是因为修复数据损坏、重复或不一致性错误很困难,有时甚至是不可能的,所以请尽可能通过规范化获得适当的性能。只有这样,如果你已经证明你无法获得所需的性能,试着去规范化,只做需要去规范化的事情。

    这方面有很多重复,我会让其他人找到它们:-)

    我认为一条合理的道路是:

    • 有一个规范化的数据库
    • 创建非规范化视图
    • 编写应用程序以查询这些视图
    • 个人资料(拥有大量客户)
    • 如果数据库确实是一个瓶颈,那么更难确定哪些表涉及其中,然后优化数据库(索引、查询计划等)
    • 再次配置文件
    • 如果db仍然是一个瓶颈,那么您可以对视图的界面进行非规范化(这样您就不必更改应用程序)

    这是因为修复数据损坏、重复或不一致性错误很困难,有时甚至是不可能的,所以请尽可能通过规范化获得适当的性能。只有这样,如果你的证明你无法获得想要的性能,试着去规范化,只去规范化需要去规范化的部分。

    当你考虑规范化时,是什么让武器槽和装甲槽有所不同?将来,你可能也会想要更多的。slotid可能应该是一个整数键。是的,我同意slotid应该是整数,但我在这里使用了一个字符串作为说明。当你考虑规范化时,是什么让武器槽和装甲槽不同?在将来,您可能也希望有更多这样的键。slotid可能应该是一个整数键。是的,我同意slotid应该是整数,但我在这里使用了一个字符串作为说明。
    equipment (<characterid>, weapon_slot, armor_slot, accessory1_sot, accessory2_slot)