Mysql
數據庫中的應用程序設置
過去,我將所有通用設置和配置項(例如:自定義應用程序標題、家庭地址、版本、調試等)都儲存在一個“settings.php”文件中,我會將其包含在我的所有腳本中。
我認為最好為諸如此類的應用程序設置專門設置一個數據庫表,這樣您就不需要編輯 php 文件來調整或進行更改。然而,我對如何設置它有點謹慎。
我一直在考慮兩種選擇:
- 我有一個單行多列的表,使每一列成為唯一的變數值。
- 我有兩列,第一列是變數名,第二列是變數的值。
從數據庫設計的角度來看,我應該注意什麼建議或事情?
在選項 1 下,您可以保證只有一行(如果您記得直接插入一行)。
- 如果要引入新設置,則必須執行 ALTER TABLE 以添加所需的列。
- 如果要刪除舊設置,則必須執行 ALTER TABLE 以刪除不需要的列。
- 您必須假設程式碼中存在該列。否則,您可能必須查詢information_schema.columns以確保表示所需設置的列是否存在於表中。在繁重的寫入環境中存在數十(甚至數百)個 InnoDB 表的情況下,查詢表 information_schema.columns 是非常糟糕的。這可能會間歇性地鎖定 information_schema.columns,直到它可以自由閱讀。
- 您應該確保表數始終為一 (1)。
在選項 2 下,情況略有不同
- 如果要引入新設置,則必須執行 INSERT 以將所需設置添加為一行。
- 如果要刪除舊設置,則必須執行 DELETE 以將所需設置作為一行刪除。
- 您必須按變數名稱查詢表以查看該選項是否存在。
- 在表中添加或刪除設置沒有虛擬限制
這些選項有什麼共同點?
- 如果您不理會舊設置,這可以允許舊版本的應用程式碼使用舊設置,但這只會在表格中引入混亂。
- 儲存引擎應該是 InnoDB 以允許多人從中讀取。
就個人而言,我會選擇選項 2,因為創建新設置、可選地刪除舊設置以及檢查現有設置都將在一張桌子上進行。檢索設置的方法都是相同的。在選項 1 下,您必須查詢 information_schema.columns 並對設置表做出某些假設。檢索設置的事件順序可能會因程式碼版本而異。