2013-08-22 27 views
2

我正在爲我的青年運動組織設計一個PHP/MySQL解決方案,它將顯示參賽隊伍參加任何特定賽季的時間表和排名。不幸的是,我只是在學習數據庫設計方面的知識,並且在我的大腦中圍繞一個相對簡單的概念進行了一些挑戰。也許有人可以介入並澄清幾點?MySQL - 組織數據庫內容(體育聯盟)

我不清楚的是如何正確構建數據庫和表格以正確啓動。這是我最終需要設置的內容:

  1. 我們有大約50個成員學校。每個人都需要他們自己的登錄ID和密碼。我考慮將這些數據存儲在他們自己的數據庫中,因爲這些帳戶將在每個賽季重新使用以代表球隊並允許教練登錄並更新他們的比賽結果。

  2. 每個賽季都有兩種不同的運動。例如,即將到來的秋季賽季有女子排球聯賽和男子足球聯賽。然後,每個聯賽都有多個分區(按地理區域劃分),學校可以在其中進行常規賽時間表。我不確定每個賽季是否需要自己的單獨數據庫,每個聯賽等。

  3. 每個賽季的常規賽將從計劃程序(通過Excel電子表格)導入並顯示在自己的網頁上,學校可以查看即將到來的遊戲並登錄以更新結果。

  4. 隨着遊戲結果的更新,我需要找到一種方法將這些結果反映在顯示該分部聯盟排名的單獨網頁上。

爲了什麼,我試圖做一個更清晰的演示,看看我的時間表和積分榜上的數據創建這兩個模擬頁面,分別爲:

http://www.712jefferson.org/pal/schedules.html

http://www.712jefferson.org/pal/standings.html

這是我在尋找你的指導。我應該如何爲所有這些數據構建MySQL框架?

我正在考慮爲學校登錄ID單獨設置一個數據庫,然後爲每個季節性運動設置一個單獨的數據庫(例如Boys Volleyball 2013),每個分區都有單獨的表格,x列表示時間表和積分榜。

這聽起來是對的嗎?我在想這一切都錯了嗎?任何幫助或指導,以幫助充實這一思想過程將非常感激!

非常感謝!

+1

現在快速注意 - 幾乎沒有一個很好的理由爲每個用戶/學校/任何一個單獨的數據庫。一切的數據庫。有一個用戶桌子和一張學校桌子,有屬於學校的用戶。 – halfer

+0

非常好。感謝您的反饋!我將用戶與所有其他事物分在一起的擔憂是,我會一次又一次地使用他們的帳戶(年復一年),而季節會定期更改。我不確定每個賽季是否會包含如此多的數據以便需要自己的數據庫,因此不得不用每個新的數據庫重複用戶。但是,如果這不是一個問題,那麼完美! – 712Jefferson

+0

我還應該說,雖然這是一個有趣的問題,但它並不適合這裏 - 關於主題問題的指導方針表明,話語性帖子或只是一個讀者感興趣的項目傾向於灰心。所以,不要擔心,如果這關閉 - 無論如何你已經得到了很多想法。 – halfer

回答

2

Ouch。你承擔了一項大工作。你絕對相信,你所做的任何事情都無法通過已有的東西來完成嗎?那麼,如果你確定,請繼續閱讀。

首先,你想要做的最難的部分是管理你的用戶訪問。我建議你在開始之前先寫下你的用戶管理模塊。

對於你想要的,Drupal或其他高級CMS系統之一似乎很可能是引導系統的好方法。Drupal會立即處理您的用戶管理權限(或者最小的問題),您可以將其餘代碼編寫爲靜態節點。這也可以很容易地添加博客,論壇,新聞和管理郵件列表等。

正如上述評論所述,您確實需要將您的數據放在一起。保存歷史比較的數據也不錯。

如果沒有延伸的CMS,你必須從心理醫生回來後,你將需要沿着線的東西:

  1. 頭文件來訪問數據庫,並檢查用戶身份驗證。

  2. 頁腳文件顯示數據

  3. 個人頁面文件提出或獲取數據。

用於處理用戶(至少)數據庫結構應該是IRO:

Person - details of individual users 
username - link person to a username 
email - email addresses 
club - sports club details 
password - passwords 
logon - record of logon attempts 
role - record of role of individuals in your site 
permissions - list of required permissions to access areas of the site 
role_permissions - default permissions for each role 
person_role - link person to role 
person_permissions - link person to permissions (only needed if some individuals need extra permissions not given routinely by their role) 
club_person; person_email; - link people to clubs and to their email addresses. 

要處理比賽,你將需要:

team - team name, group and club reference 
grouping - list of groups eg by age. 
divisions. - list of divisions 
venue - list of venues. Include GPS!!! 
match - division, grouping, team1, team2, venue, date, time 
result - team1 reported result, team 2 reported result, approved result (you may need to intervene!) match. 

正如你可以看到你需要公平的幾桌,但你不能嘗試做實際的團隊有趣的東西,直到你有你的用戶訪問正常工作。

我爲你勾畫出的是一個正常形式的db。沒有文本數據是重複的,數據很容易檢索,索引和顯示。我確實覺得這個問題對於SO來說太寬泛了,因爲爲你設計數據庫有點超出範圍,但我認爲通用格式是有用的。

每個表只能包含必要的獨特數據,例如:

Person: personid int, surname, forename, style, whenadded, whoadded, inuse 
email: emailid, email, whenadded, whoadded, inuse 
email_person: emailpersonid,emailid,personid, whenadded,whoadded,inuse 

這允許多人共享一個電子郵件地址和多個電子郵件地址被應用到一個人沒有文字重複。 ID應該鍵入INT AUTO_INCREMENT PRIMARY KEY而不是SERIAL,因爲這樣可以節省大量存儲空間,並且永遠不會在此應用程序中填充INT。

其他表格應該以相同的方式創建。 whoadded和whenadded列是可選的,相當的存儲飢餓,但可以非常有用。 inuse是必不可少的,將其設置爲BOOL,您可以在不刪除團隊的情況下刪除團隊 - 數據不會丟失。對於審計而言,被刪除和被刪除的內容也很有用。

關於密碼的一句話 - 請確保您將它們存儲爲SALTED HASH。如果你這樣做,當你的網站被黑客攻擊時,沒有人會將他們用於網上銀行的密碼暴露出來。人們常常是白癡。你必須照顧他們。

正如我所說,有點超出範圍,所以我會在那裏結束答案 - 它會根據您的要求提供第四範式Db的基本輪廓,該輪廓將強健且可擴展,但讓您完成這項工作。如果問題變得太難,爲什麼不問更多的問題呢?

祝你好運。

增加:

DIY框架:

如果你不想學習使用現有的框架或CMS之一,你需要自己編寫。奇怪的是,這實際上很簡單。

的header.php:

<?PHP 
$mysqli=new mysqli(credentials....)//connect to database and present a mysqli or pdo object. 
session_start(); //open a session 
//you will need to authenticate your session here - see below 
?> 

footer.php:

<?PHP 
require("header.php"); 
//do some stuff that generates $content 
$pagetitle="mypage.php"; 
require("footer.php:); 
?> 

應該強調的是,這是裸:

<HTML> 
<HEAD> 
<TITLE> 
<?PHP echo $pagetitle;?> 
</TITLE> 
</HEAD> 
<BODY> 
<?PHP echo $content;?> 
</BODY> 
</HTML> 

這些都是由mypage.php使用最低限度你會需要,而且真的很爛 - 它只是用來展示如何開始,而不是理想代碼的典範。它會工作。

的關鍵是創建提出你需要的變量,如數據庫連接,用戶名,用戶登錄狀態等,並可以輸入信息到呈現數據的落款頭。頁腳是您將HTML和PHP結合在一起的唯一地方。

使用$ _SESSION存儲需要在頁面之間保留的信息。只要你喜歡

這些文件可以是簡單或複雜 - 我創造了我自己很久以前是做用戶和會話幾項檢查,並可以顯示腳本,自定義CSS文件,這樣在頁腳。如果你開始簡單並根據需要進行構建,這並不難。 SO會在這裏幫助你。謹慎的

一個字:雖然你可以開始很簡單,你正在嘗試做的有腿會變得不可收拾。請在啓用並運行代碼後審覈您的代碼,以確保您沒有無意中包含安全漏洞。當你進入一個項目並且需要快速修復時,包含這些內容非常容易,除非你正在尋找他們,否則他們可能會很難在以後發現。

+1

關於數據庫規範化的好建議,儘管(從問題中可獲得的有限的細節)我傾向於選擇一個框架而不是CMS。後者的內部結構經常會有很多不足之處,所以我只有在基於故事的內容管理實際上屬於職權範圍時才傾向於他們。用戶管理模塊可用於很多框架,並且它們將所有的哈希/鹽漬化作爲標準。 – halfer

+0

真棒帖子!感謝您的所有反饋。寶貴的,有價值的東西。關於用戶角色:我試圖儘可能簡單地管理它。每個學校將被分配一個用戶ID。用該ID存儲的唯一其他數據是密碼。他們只有在點擊某個遊戲的分數報告圖標時才能夠使用該ID和密碼,然後通過彈出域來輸入結果。我需要編寫一些基本代碼來驗證參與特定遊戲的兩個團隊中只有一個團隊正在更新結果。 – 712Jefferson

+0

鑑於用戶的這一有限角色,您是否仍會推薦使用CMS模塊來管理它們?另外,如果你有時間,可以請你詳細說明你的框架是什麼意思? – 712Jefferson

1

我在你的鞋子,我找到了最好的解決方案是使用後端即服務(巴斯)提供商,比如Parse.com或Stackmob.com或其他許多人。他們會爲您完成數據庫託管以及您的用戶管理(登錄/註冊/忘記密碼等),因此您不必擔心。您可以通過REST API訪問它們,並且在Github上也有PHP庫。

由於您是數據庫管理的新手,這是一項不平凡的任務,因此此解決方案可能會爲您節省一些麻煩。

當然,你還必須決定如何安排你的表(或「類」的解析,在Stackmob等「模式」),但他們也提供了幫助他們的關係的API。他們有一個專門用於存儲用戶的預定義用戶表。

當然,他們的API不像SQL那麼靈活,但它也可以避免SQL注入,這是靈活性的一個缺點。另一方面,他們還提供自定義代碼來提高靈活性。

編輯。忘記了,這些BaaS平臺還允許將數組存儲爲數據庫字段,這可以非常方便。

1

這可能是一個很大的構建。你可能想嘗試現有的服務來進行聯盟管理。那裏有幾個。我知道一些使用Teamopolis的朋友,他們對這項服務非常滿意,我認爲它可以完成您所尋找的一切。