2014-12-13 28 views
0

我在想什麼是創建數據庫的最佳方式。很多時候我面臨這樣的想法:什麼是最好的?MySQL設計/建模

  • 場景1:只有一個請求,我的數據庫,而PHP轉換的內容被存儲。
  • 方案2:一種MYSQL_QUERY到我的數據庫來選擇,這將在第二MYSQL_QUERY轉換的含義來使用的一個值(平移例如1 =公共)
  • 方案3:一種MYSQL_QUERY到我的數據庫來選擇一個值我使用PHP進行轉換/翻譯。

請讓我用一個例子更加清晰: 比方說,我有哪些存儲組織&水平table1的

  • 場景1:我創建了2場(VARCHAR(255))和我在表格1中創建了2個字段(整數),並存儲了organisation_id =「1」& level_id =「2」,然後我創建了table2, organisation_id & organisation_name & level_id & level_name對應於table1中創建的值。
  • 場景3:我創建了2個字段(整數),並在table1中存儲了organisation_id =「1」& level_id =「2」,然後我用PHP轉換了1 & 2的含義。

我真的很感激你對什麼是最佳實踐的看法。

非常感謝

回答

0

最佳實踐通常是將此實現爲2個表 - 您的方案2最接近。

這可以確保應用程序依賴的所有數據都在數據庫中,例如,可以輕鬆報告使用mysql客戶端的情況。

但是,您的方案2描述了使用2個查詢從數據庫獲取數據,但基於上面描述的內容,應該可以僅使用一個 - 表中的level_id連接。

create table organisations (
    org_id integer, 
    org_name varchar(255), 
    level_id integer); 

create table levels (
    level_id integer, 
    level_description varchar(255)); 

在實踐中你指定的主鍵,確定不能爲null等欄目,但希望:

如果我正確理解你的要求,你可以有2個表像下面這樣做上面給出了一些關於哪些數據在哪個表中的想法。

然後讓所有組織名單和水平,他們都可以運行:

select org_name, level_description 
from organisations 
join levels on organisations.level_id = levels.level_id; 

我發現它的往往值得獲得SQL在MySQL客戶端的工作拷貝它,適應它的前PHP程序。

+0

感謝您的反饋!我很感激。我將使用連接查詢來查找第二個場景。 – 2014-12-13 06:18:43

0

的另一件事想到的就是這個數據庫將有多少項包含。大量的條目意味着整數列類型將以不必要解釋PHP代碼中的值爲代價節省空間。

但還記得唐納德克努特的話,「過早優化是萬惡之源。」因此,不要花太多時間在這一個設計決定上苦苦掙扎,而不是確保所有需要存儲的信息都是從一開始就存在的。

+0

我創建了PHP應用程序誰將管理一個潛水中心。所以我認爲一年後潛水中心應該有很多顧客......這就是爲什麼我現在想到最好的做法。所以你會推薦整數和PHP來解釋這個值? – 2014-12-13 04:09:11