2009-10-09 28 views
3

我正在Python中使用MUD(多用戶地下城),現在我只是想要添加一些房間,敵人,物品等。我可以硬編碼所有這些,但它似乎是這對於數據庫來說更是一份工作。你能提供一些關於設置我的數據庫的建議嗎?

但是,我從來沒有真正做過數據庫的任何工作,所以我想知道你是否有任何建議如何設置?

  • 我應該用什麼格式存儲數據?
    • 我正在考慮爲每個實體在數據庫中存儲一個Dictionary對象。以這種方式,我可以簡單地將新屬性添加到數據庫中,而無需更改數據庫的列。這聽起來合理嗎?
  • 我應該將所有信息存儲在同一個數據庫中,但不同的表或不同的實體(敵人和房間)在不同的數據庫中。

  • 我知道這將是一個蠕蟲的罐頭,但對於一個好的數據庫有什麼建議? MySQL是不錯的選擇?

+0

Google搜索「泥漿數據庫模式」的頂級結果是專家交流。這裏希望在幾天後它將成爲StackOverflow! – DVK 2009-10-09 19:23:25

+1

另外,我想親自歡迎您來到MUD開發的絕妙地獄。比我玩沉默的東西更多的樂趣,從我記得的我的不良MUD過去(我編寫了一個C MUD,我的朋友跑過) – DVK 2009-10-09 19:25:51

+0

我喜歡一些MUD,但我認爲開發一個會很有趣。 – samoz 2009-10-09 21:27:19

回答

3

1)在不同的數據庫中,幾乎沒有任何理由爲相同的應用程序提供數據。除非你是一家財富500強的公司(好吧,我正在擴張)。

2)將信息存儲在不同的表中。

作爲一個例子:

  • T1:房間

  • T2:間公共屬性(證明3到每個房間),每**室溫行*

  • T3:房間獨特的屬性(適用於少數房間,每財產每間房 - thos可以很容易地添加自定義屬性,無需添加新的列

  • T4:房室連接

    有T2和T3是很重要的,因爲它允許你結合效率和行每個房間的想法的速度,其中它的適用與屬性,每靈活性/ maintanability /節省空間-entity每行(或對象/屬性/值IIRC這就是所謂的花哨術語)架構

Good discussion is here

3)實施明智,試着寫一些可重複使用的,例如,具有通用的「Get_room」方法,它們在訪問數據庫之下 - 理想情況下通過事務SQL或ANSI SQL進行訪問,這樣您就可以在數據庫後端更改的情況下輕鬆地生存。

對於初始工作,您可以使用SQLite。廉價,簡單和SQL兼容(所有最好的屬性)。安裝幾乎沒有什麼,數據庫管理可以通過免費軟件工具甚至FireFox插件IIRC(所有FireFox 3數據存儲 - 歷史,書籤,地點等 - 都是SQLite數據庫)完成。

以後,無論是MySQL還是Postgres(我都不是專業人士,所以不能推薦一個)。 IIRC在某些時候,Sybase也有免費的個人數據庫服務器,但不知道這是否仍然如此。

3
  • 該技術被稱爲entity-attribute-value model。通常情況下,最好使數據庫模式反映對象的結構,並在對象結構更改時更新模式。這樣嚴格的模式更容易查詢,並且更容易確保數據庫級別的數據是正確的。
  • 一個具有多個表的數據庫是要做的。
  • 如果你想要一個數據庫服務器,我推薦PostgreSQL。 MySQL有一些優點,比如容易複製,但是PostgreSQL通常更適合使用。如果你想要更小的東西直接與應用程序一起工作,SQLite是一個很好的嵌入式數據庫。
0

一個數據庫。每個數據庫表都應該引用一個實際的數據對象。

例如,創建一個表的所有項目,所有的生物,所有的角色職業,所有寶藏,等

現在花一些時間,並找出對象將如何相互關聯的,因爲這會影響你的數據庫結構。例如,一個角色可以有多個角色類嗎?怪物可以擁有角色類嗎?怪物能攜帶物品嗎?房間可以有多個怪物?

它看起來很迂腐,但通過確定哪些數據庫對象「屬於」其他數據庫對象,您可以儘早爲自己節省很多麻煩。

2

將整個對象(序列化/編碼)作爲值存儲在數據庫中對查詢不利 - 我相信你泥地裏的某些查詢不需要知道100%的屬性,或者可以檢索對象列表由屬性的值。

1

好像這更是一個工作 的一個數據庫

如此,儘管「數據庫」並不一定意味着「關係型數據庫」。大多數現有的MUD都將所有數據存儲在內存中,並從純文本數據格式的平面文件中讀取。我不一定會推薦這條路線,只是指出傳統數據庫絕不是必要的。如果你想要走關係路線,Python的最新版本會附帶sqlite,這是一個輕量級的嵌入式關係數據庫,具有良好的SQL支持。

使用關係數據庫與您的代碼可能會很尷尬。對遊戲邏輯類的任何更改都可能需要對數據庫進行並行更改,並更改爲讀取和寫入數據庫的代碼。出於這個原因,良好的規劃將會幫助你很多,但是如果沒有經驗,很難規劃好數據庫模式。至少首先計劃你的實體類,然後圍繞它建立一個數據庫模式。閱讀normalizing a database並理解其中的原則將有所幫助。

你可能想要使用一個'對象關係映射器',它可以爲你簡化很多這個。 Python中的示例包括SQLObjectSQLAlchemyAutumn。這些隱藏了很多複雜的因素,但結果可能會隱藏一些重要的細節。我建議直接使用數據庫,直到您更熟悉它爲止,並且考慮將來使用ORM。

我正在考慮在數據庫中爲每個 實體存儲一個字典 對象。通過這種方式,我可以在 的數據庫中簡單地將新屬性添加到數據庫中,而不必更改數據庫的列。那 聽起來合理嗎?

不幸的是沒有 - 如果你這樣做,你浪費了數據庫的99%的能力,並有效地使用它作爲榮耀的數據存儲。但是,如果您不需要上述的數據庫功能,如果您使用正確的工具進行工作,則這是一條有效的路線。標準的shelve模塊非常值得爲此尋找。

我應該存儲在 相同的數據庫,但在不同 表或在不同的數據庫中的不同實體(敵人 和房間)的所有信息。

一個數據庫。每個實體類型的數據庫中有一個表。這是使用關係數據庫(如MySQL,SQL Server,SQLite等)時的典型方法。

我知道這將是蠕蟲, 一罐但什麼是一個好的 數據庫一些建議嗎? MySQL是不錯的選擇?

我會建議堅持使用sqlite,直到你更熟悉SQL爲止。否則,MySQL是PostGreSQL的免費遊戲數據庫的合理選擇。