Database 你能提供一些关于建立我的数据库的建议吗?

Database 你能提供一些关于建立我的数据库的建议吗?,database,database-design,data-modeling,mud,Database,Database Design,Data Modeling,Mud,我正在用Python开发一个MUD(多用户地下城),现在我需要添加一些房间、敌人、物品等。我可以硬编码所有这些,但这似乎更像是数据库的工作 然而,我以前从未真正做过任何数据库方面的工作,所以我想知道您是否对如何设置有任何建议 我应该以什么格式存储数据? 我正在考虑在数据库中为每个实体存储一个Dictionary对象。通过这种方式,我可以在不改变数据库列的情况下动态地向数据库添加新属性。这听起来合理吗 我应该将所有信息存储在同一个数据库中,但存储在不同数据库中的不同表或不同实体(敌人和房间)

我正在用Python开发一个MUD(多用户地下城),现在我需要添加一些房间、敌人、物品等。我可以硬编码所有这些,但这似乎更像是数据库的工作

然而,我以前从未真正做过任何数据库方面的工作,所以我想知道您是否对如何设置有任何建议

  • 我应该以什么格式存储数据?
    • 我正在考虑在数据库中为每个实体存储一个Dictionary对象。通过这种方式,我可以在不改变数据库列的情况下动态地向数据库添加新属性。这听起来合理吗
  • 我应该将所有信息存储在同一个数据库中,但存储在不同数据库中的不同表或不同实体(敌人和房间)中吗

  • 我知道这将是一个蠕虫罐头,但有什么好的数据库的建议?MySQL是一个不错的选择吗

    • 1)几乎没有任何理由让同一应用程序的数据存在于不同的数据库中。除非你是一家财富500强规模的公司(好吧,我举个例子)

      2) 将信息存储在不同的表中

      例如:

      • T1:房间

      • T2:房间公共属性(适用于每个房间),每个**房间一行*

      • T3:房间独特属性(适用于少数房间,每个房间的每个属性都有一行)-thos可以轻松添加自定义属性,而无需添加新列

      • T4:房间连接

        T2和T3非常重要,因为它允许您将每行每房间的效率和速度与每行每实体属性的灵活性/可维护性/节省空间(或用花哨的术语称为IIRC的对象/属性/值)模式结合起来

      3) 在实现方面,尝试编写一些可重用的方法,例如,使用通用的“Get_room”方法,这些方法可以通过transact-SQL或ANSI SQL访问DB-=理想情况下,这样您就可以轻松地在更改DB后端后生存下来

      对于初始工作,可以使用SQLite。便宜、简单且与SQL兼容(最好的特性)。安装几乎什么都不是,DB管理可以通过免费软件工具甚至FireFox插件IIRC来完成(所有FireFox 3数据存储—历史记录、书签、位置等—都是SQLite数据库)

      对于以后,MySQL或Postgres(我都不是专业人士,所以不能推荐)。IIRC在某个时候Sybase也有免费的个人数据库服务器,但不知道情况是否仍然如此。

      • 这种技术被称为。通常,最好使用反映对象结构的DB模式,并在对象结构更改时更新模式。这种严格的模式更容易查询,也更容易确保数据库级别的数据是正确的
      • 一个数据库和多个表是一种方法
      • 如果你想要一个数据库服务器,我推荐PostgreSQL。MySQL有一些优点,比如易于复制,但PostgreSQL通常更易于使用。如果您想要直接与应用程序一起工作的较小的数据库,SQLite是一个很好的嵌入式数据库

      一个数据库。每个数据库表都应该引用一个实际的数据对象

      例如,为所有物品、所有生物、所有角色类、所有宝藏等创建一个表

      现在花点时间,找出对象之间的关系,因为这会影响数据库结构。例如,一个角色可以有多个角色类吗?怪物可以有角色类吗?怪物可以携带物品吗?房间里可以有多个怪物吗

      这看起来很迂腐,但通过找出哪些数据库对象“属于”哪些其他数据库对象,您可以在早期为自己省去很多麻烦。

      将整个对象(序列化/编码)存储为数据库中的值不利于查询-我确信mud中的某些查询不需要知道100%的属性,或者可以通过属性值检索对象列表

      看起来这更像是一份工作 对于数据库

      是的,尽管“数据库”并不一定意味着“关系数据库”。大多数现有MUD将所有数据存储在内存中,并从以纯文本数据格式保存的平面文件中读取。我不一定推荐这种方法,只是指出传统的数据库是没有必要的。如果您确实想走关系路线,最新版本的Python附带了一个轻量级嵌入式关系数据库,具有良好的SQL支持

      在代码中使用关系数据库可能会很尴尬。对游戏逻辑类的任何更改都可能需要对数据库进行并行更改,以及对读取和写入数据库的代码进行更改。因此,良好的规划将对您有很大帮助,但如果没有经验,很难规划好的数据库模式。至少先计划好实体类,然后围绕它构建一个数据库模式。阅读并理解其中的原则将有所帮助

      您可能希望使用“对象关系映射器”,它可以为您简化很多工作。Python中的示例包括、和。这些对你们来说隐藏了很多复杂性,但结果也会隐藏一些重要的细节。我建议您直接使用数据库,直到您更熟悉它,并考虑将来使用ORM。< /P> 我在考虑储存一本字典 在数据库中为每个 实体。那样的话,我就可以了 只需将新属性添加到 动态数据库,无需更改 数据库的列。是吗 听起来合理吗

      不幸的是,如果您这样做,您将浪费99%的数据库功能,并将其有效地用作美化的数据存储。然而,如果你不需要