0

我正在翻新我們的CMS,並遇到了我不知道要採用哪種解決方案的情況。基本上,我們每個客戶都將自己的網站內容存放在自己的數據庫中。這包括內容,調查,訪客使用的搜索詞,菜單結構等。關於如何保持網站偏好的不同選項?

我們客戶網站上的很多內容都是動態的,他們可以通過CMS更改它們。所有這些數據都保存在我設計的關係數據庫中,但是我在幾個將這些首選項保存在表中的情況下運行會過度。

例如,CMS允許他們發送電子郵件到收件人列表。他們可以選擇使用我們的服務器,或者他們可以放入他們自己的smtp服務器。然而,在這種情況下,創建一個帶有「mailService」列的表並且讓它保存特定值是有點矯枉過正的,因爲表只會保存一行。

下面是我通過搜索本網站和/或谷歌了一下拿出一些想法,但我也不太清楚什麼他們的優點和缺點是:

  • 基本上容納所有像我上面提到的表格中的偏好,我想避免的東西。
  • 將所有這些「單個」首選項保存在一個XML文件中,當它們改變其設置時我將修改它。
  • 有一個名爲preferences的表,其中包含以下columsn:id,preferenceName,value。每當我有一個新的偏好,我只是添加它,修改它或刪除它(我不喜歡這個選項,因爲我覺得我必須硬編碼太多的值......至少從方式我看到了實現)

我很傾向於XML的想法,但我想從這裏的好社區的一些反饋Stackoverflow :)也許使用XML將是一個可怕的想法我完全忽略了一個原因,或者有一個你愚蠢的原因 - 並不是你只是做了這個解決方案。感謝您的任何意見!

回答

1

xml路由很好用,因爲它很容易允許添加新的屬性並允許對屬性進行分組。缺點是無法使用SQL來遷移或更新首選項數據。它必須以編程方式完成。如果需要,您也不能查詢個人屬性的偏好設置。

總而言之,如果您在不需要通過SQL查詢或更新它們的情況下保留少量偏好,那麼xml就可以適用於您。否則,數據庫中的名稱,值對錶將是更好的方法。

2

我會說使用一個數據庫表,如果你已經有了,並且設置的名字分成明智的類別:

mail_service:recipients 
mail_service:sender 
mail_service:smtp:hostname 
mail_service:smtp:username 
mail_service:smtp:password 

除此之外,我更喜歡yaml以XML爲可讀性的緣故。這就像XML,但沒有任何混亂。

mail_service: 
    recipients: 
     - [email protected] 
     - [email protected] 
     - [email protected] 
     - [email protected] 

    visuals: 
    header: 
     text_color: #BBCCDD 
     background_color: #FFFFFF 

Symfony YAML class是一個很好的獨立庫該文件解析爲PHP數組。

你也可以使用一個簡單的PHP文件。

$settings = array(
"mail_service:recipients" => " .... ", 
"mail_service:sender" => " .... ",  
"mail_service:smtp:hostname" => " .... ", 
"mail_service:smtp:username" => " .... ", 
"mail_service:smtp:password" => " .... "); 
+0

+1用於標識它不應該是數據庫...或XML。這裏有很多文件格式,XML並不總是最好的選擇。 **特別是**僅用於鍵/值映射。 – 2010-07-05 18:52:49

+0

感謝您的信息。我從來沒有聽說過YAML,因此我首先在這裏提出這個問題。 – Gazillion 2010-07-05 20:25:13

1

我將與XML文件去(儘管它並不需要是XML - 如果它是Java我會使用一個屬性文件,直到我發現了一個理由不)或單個鍵/值表(id字段並沒有獲得多少好處,除非它是區分不同安裝的外鍵)。

就我個人而言,我喜歡SQL的多功能性,並擁有獨立的東西。使用數據庫不會增加任何尚未存在的複雜性(例如,如果性能問題需要增加自己的XML緩存,您將獲得相同級別的免費緩存)。我只會選擇XML,如果這些值有一個非常複雜的結構,會使得通過SQL操作繁瑣。

我不確定爲什麼你認爲你需要「硬編碼很多值」,特別是爲什麼數據庫解決方案會比使用文件解決方案有更多的硬編碼。

+0

我想你是正確的硬編碼位。在搜索所有數據時,我不會真正使用主鍵,而是使用實際首選項的名稱。起初,我的擔心與我安裝CMS的新實例時發生的情況有關,但我認爲空表僅僅意味着值未設置,因此實際上不會導致任何問題。感謝您的輸入:) – Gazillion 2010-07-05 18:53:19