2014-12-06 40 views
7

我在市場上工作,並想知道如何處理網站設置,如標題,網址,如果其https,聯繫電子郵件,版本等最好的方式將「網站設置」數據存儲在數據庫表中的最佳方式是什麼?

我想構建表它很容易更新,並且可以將更多設置添加到其中以獲取。

我開發了2個結構,要麼保持一行,列名稱作爲設置名稱,並將行列值作爲設置值。並用mysql_fetch_assoc回顯第一行值列的名稱。 enter image description here

我也在考慮爲每個設置都有一個新的自動增量行。並將其轉換爲數組以從數據庫中獲取以爲獲取設置名稱的列指定列名稱。 enter image description here

什麼是你有效的處理方式。謝謝。

回答

2

這兩種方式工作正常。我想說,如果您想在管理控制檯中管理這些設置,那麼按列設置一個更好,因爲您可以使用管理員的簡單INSERT查詢即時添加新設置。哪一個比ALTER TABLE查詢更好(更安全)。

+1

那正是我要去做的事情,幾乎有一個頁面,我可以編輯所有的setti而不是手動進入數據庫,或者將其硬編碼到我的服務器某處的config.php文件中。當我更新設置行值時,是否還需要使用ALTER QUERY COMMAND? – xtrman 2014-12-06 01:12:28

+1

不,你將不得不執行一個'UPDATE'查詢。例如'UPDATE settings_table_name SET setting_value ='new title'WHERE setting_name ='title'' – 2014-12-06 01:17:35

+0

謝謝你:),完全理解。 – xtrman 2014-12-06 01:20:29

4

對於每個不同選項設置的行,使用名稱/值對每行一個,可能是最好的方法。它比許多列更靈活;如果添加選項設置,則不必運行任何種類的ALTER TABLE操作。

WordPress的wp_options表格就是這樣工作的。看這裏。 http://codex.wordpress.org/Options_API

如果你有一個「複合」選項,你可以將serialize一個php數組存儲在表的一行中。

+1

我從來沒有想過實現數組,感謝您向我展示ollie!我將def去與單獨的行結構。再次感謝鏈接。 – xtrman 2014-12-06 01:09:39

2

這取決於您使用的技術。例如在PHP Symfony Project中,設置主要存儲在平面文件(Json,xml ...)中。

我曾經爲客戶開發過許多大型Web應用程序。鍵/值表通常用於存儲簡單設置。如果你需要存儲多個值,你必須序列化它們,所以這有點棘手。

請記住密碼敏感數據,如密碼(Sha256 +鹽)。

最好的方法是創建兩個表。 一個表來存儲設置爲鍵/值:

CREATE TABLE Settings (
    Id INT NOT NULL PRIMARY KEY, 
    Key NOT NULL NVARCHAR, 
    Value NULL NVARCHAR 
    EnvId INT NOT NULL 
); 

然後,你需要一個環境表。

CREATE TABLE Environment (
    Id INT NOT NULL PRIMARY KEY, 
    Key NOT NULL NVARCHAR, 
); 

不要忘記外鍵約束。

此外,你應該在一個單獨的模式中創建這些表。您將能夠通過過濾訪問來應用安全策略。

因此,您只需激活一個環境就可以使用許多環境(開發,測試,生產,...)。例如,您可以配置爲不在發展環境中發送電子郵件,但在生產環境中發送它們。

因此,您執行連接以獲取指定環境的設置。您可以添加一個布爾值來輕鬆切換環境。

如果你使用一個文件(它不需要數據庫連接),你可以得到類似的東西(JSON):

所有的
Env: 
    Dev: 
     Email: ~ 
    Prod: 
     Email: [email protected] 
+1

設置表與用戶表完全分離。但我沒有使用任何技術。它最初是硬編碼的,並希望將其變爲靈活的可編輯結構。 – xtrman 2014-12-06 01:13:51

+0

如果我密碼,當我需要發送電子郵件讓我們說cron作業時,我將如何能夠提取密碼? – xtrman 2014-12-06 01:19:35

+0

你必須處理鍵/值表。這比通過設置創建一個列更好。例如,如果你想添加一個新的設置,你只需要執行一個插入語句。在其他結構中,你將不得不做一個改變列。 – K4timini 2014-12-06 01:20:14

2

首先,我會considere一兩件事,一個配置文件.. 。

那麼你應該問自己,你需要爲您的項目...

首先我會considere配置文件VS數據庫:

的一大優勢配置文件上的數據庫選項是可擴展性的,如果你有許多應用程序/站點需要這些配置,那麼去數據庫,因爲它會避免你複製幾次相同的配置文件,包括版本控制和修改文件的所有問題在所有這些不同的「網站」

否則,我會堅持配置文件,因爲訪問速度更快的應用程序和文件可能仍然aviable情況下的sql服務器中斷在這種情況下,某些配置可能仍然是相關的,配置文件也可能包含在您的版本控制軟件中。出於一些安全原因,想象你的數據庫是在許多軟件之間共享的...

然後,如果你堅持數據庫我會重讀一行一個標籤一個配置,我認爲它easyer管理記錄比表結構,特別是隨着時間和你的軟件的演變。如果其他開發人員加入你的項目,你的表格結構可能會很快變成一個大混亂:]

最後的參數是安全性...一個好的做法是設置「DB用戶」向沒有DB結構修改權限的用戶形成軟件,只有訪問/修改刪除記錄的權利;)

相關問題