2012-02-22 45 views
1

請注意,我是數據庫設計的noob,因爲我從來沒有這樣做過。MySQL數據庫模式 - 一般問題

我有一個爲在Java中創建的在線遊戲設置的網站。當玩家退出遊戲時,我已經在名爲「highscores」的數據庫中添加了一行(或者如果它已經存在,則更新一行)...

我有一個高分我的網站上的頁面使用PHP從高分表中提取數據並將其組織到一個html表格中,以便玩家可以看到他們的分數,並且一切都很好。我也在我的網站上安裝了fluxBB(一個論壇系統)並根據我的喜好進行了修改。

所以在我的phpMyAdmin,我一共有5個數據庫的:INFORMATION_SCHEMAperformance_schemamysql的高分論壇。 前三個數據庫是在我安裝phpmyadmin時添加的,我沒有碰到它們。數據庫我在安裝論壇時做的論壇;它要求數據庫創建表,所以我創建了一個新的數據庫來放置所有的表。

所以我有一些問題...

  1. 是我的數據庫建立了一個典型的網站會怎麼做呢?如果不是的話,一個典型的高分&論壇的網站如何建立數據庫?他們有一個數據庫爲他們的網站,然後一個數據庫爲他們的遊戲?

  2. 如果我想添加關於服務器的統計信息,例如「已創建帳戶數量x」或「x玩家數量目前在線」,我將在哪裏存儲此信息?我考慮將高分數據庫重命名爲「遊戲」(或我的遊戲名稱),然後在裏面,這將是一個「高分」表和「server_statistics」表。這很好嗎?但「server_statistics」表只會有一行包含統計信息......是正常的嗎?

  3. 如果我想給我的網站添加一個投票,我會創建一個名爲「poll」的新數據庫嗎?或者我應該有一個名爲「網站」的數據庫,我將所有網站相關的數據放入?但是我有一個「論壇」數據庫,那麼我該怎麼做?

  4. 網站如何正常發佈新聞?如果文章存儲在數據庫中,他們如何發佈新聞以便它出現在主頁上?那麼會有一個「新聞」數據庫嗎?

很難在網上找到通用的問題......我試着尋找,但請不要只是鏈接到我的文章,因爲它可能不適合我的情況。

在此先感謝。

+0

也許你應該問問個別問題。你更可能收到答案。 – jcubic 2012-02-22 22:52:12

回答

0

既然我們談論的是一個相對較小的數據庫,掌握關於一個網站和一個遊戲的信息,那麼最好使用一個websitegame數據庫,並將不同的信息分割到不同的表中。

你在這裏沒有指定的想法是你如何保持高分?那些鏈接到用戶表,論壇用戶或只是高分表中的名稱字段?

  1. 由於您使用的是外部的論壇系統,我將保留該數據庫,因爲它是和剛剛創建的第二個以上由我的比賽,我的網站使用的建議。

  2. 像大多數在線用戶和帳戶數量的統計數據不會保存在數據庫中,因爲這會造成對DBMS的不必要和多餘的調用,這是不理想的。那些最有可能被動態地創建,或者甚至更好地使用cron作業創建並且創建緩存的統計信息,即使這個數字是幾分鐘的時間,也將被顯示給用戶。

  3. 再次有一個website數據庫,然後您可以根據需要在website db內創建其他表,並按原樣保留forums數據庫。

  4. 大多數你會看到將有將有多個表,即中央數據庫的站點。 usersnewscommentsreviews

消息表模式可以是形式:

id    int auto_increment & primary key 
title   varchar(*) 
content  text or big varchar according to your needs 
posted_on  datetime or timestamp 
posted_by  int key representing the authors id 

一般來說,如果你是剛剛起步,與數據庫和有興趣的學習有關最佳實踐的更多信息,我會先閱讀一些有關該主題的書籍/文章,從而導致更專業化的主題,如數據庫關係,規範化和最佳實踐。

除此之外,你會發現它非常有趣的,看看別人怎麼結構的數據庫,並可以通過檢查一些可用的開源項目的網上如Joomla,WordPress和其他人可以輕鬆完成。當你開始尋找時,它會變得更容易。

+0

高分表中的行有玩家的用戶名+ 36「分數」。所以每行總共有37個值。論壇與遊戲是分開的(他們需要重新註冊),我不介意這一點。我不知道如何從我的服務器獲取統計信息,以便在網站上顯示,如果我沒有將其存儲在數據庫中:S我的遊戲有一個服務器和一個客戶端,都是用Java編寫的。當服務器運行時,人們可以通過客戶端加入。服務器可以獲得大量的在線用戶,但是如何通過不首先在數據庫中存儲該值來顯示該值? – user1226792 2012-02-22 23:30:16

+0

如果我知道它是正確的,你有'用戶名''game1score'' game2score'高分表'...?對於統計數據,我不會使用像這樣的簡單數字的數據庫,它會不斷變化,並顯示很多次。你甚至可以把它保存在一個簡單的'text'或'XML'文件中 – Kypros 2012-02-22 23:33:21

+0

是的,這就是我創建高分的方式。 我想我現在已經得到了所有答案,我會嘗試設置它來存儲和讀取文本文件中的統計信息。謝謝你的幫助。 – user1226792 2012-02-22 23:39:52

0

讓我試着這樣做是爲了:

  1. 沒有這樣的事,作爲一個典型的網站有一些已經被設計爲使用特定的模式,這就是他們使用的軟件包。設置根據需要而變化,這可能是1個具有多個表的數據庫或多個數據庫。
  2. 您需要有一個表來監控您的用戶登錄和註銷以及某些帳戶的開始日期。如果你出於某種原因分離論壇和高分,我建議你將用戶管理分開。
  3. 取決於您的實施。如果您正在使用他人的產品,您可能會爲您定義一個數據庫,或者根本沒有在您的網站上顯示定義的數據庫,並將數據存儲在別處。
  4. 我甚至不確定你的意思。當新聞被存儲時,它們可以被存儲在數據庫中,在這種情況下文章被檢索用於文章並被格式化以用於顯示,或者它可以是服務器上的文件並且基於存儲在數據庫和腳本中的ID和鏈接信息只需檢索並顯示它。

一般來說,有數據庫規範化的最佳實踐,你應該看看你的網站。但首先我會建議檢查你的論壇和遊戲之間的關係。如果它們彼此不可分割,即如果一個人玩遊戲,他們參與這個遊戲,反之亦然,那麼這些數據庫實際上可能是一個遊戲。

+0

謝謝。問題4的意思是,如果一個網站從數據庫中檢索文章,然後向網站添加新聞,您將手動進入數據庫並在新聞文章中添加一行?這看起來不正確。 – user1226792 2012-02-22 23:05:06

+0

爲什麼它聽起來不正確?如果你考慮一篇文章只是一段'text',可能是標題的'varchar','posting_time'的'datetime','user_id'的'int',並且很容易保存在一個唯一的ID號行 – Kypros 2012-02-22 23:11:24

+0

好的:S它似乎很奇怪進入phpmyadmin和插入一行,使一個新聞發佈?我正在考慮創建一個名爲「新聞」的論壇,當管理員在那裏創建一個主題時,首頁將獲得該帖子並將其放到首頁。 – user1226792 2012-02-22 23:32:50