2013-11-09 119 views
1

我正在開發一個管理公司客戶端的Web應用程序。電話,地址,電子郵件和姓名等詳細信息將保存在每個客戶端,並且在數據庫表中有相應的字段,我可以保存這些詳細信息。動態更改mySql數據庫表

應用程序的用戶必須能夠更改不同的細節。例如,他可能會決定我們需要一個額外的字段來保存客戶端的傳真號碼,或者他可能決定不再需要地址字段並將其刪除。

使用NoSql不是一個選項。我必須使用PHP和mySql。

我一直在考慮使用JSON字符串來保存數據庫表字段,但我還沒有拿出一個解決方案。

正在改變我的數據庫表的結構唯一的解決方案,我的問題?如果可能,我想阻止動態更改數據庫表的結構。

實現動態視圖可能是一個想法嗎?但是,我想這不會解決插入新字段的必要性。

預先感謝您。

+0

數據庫有多大?是一個JSON字符串對你來說是一個真正的選擇?你不需要真的搜索這些字段或加入他們或任何東西? (我的意思是,你可以用'like'或'regexp'進行搜索,但它不一樣) –

+0

在數據庫中使用JSON(一種表示數據的方式)更多是最後的手段。由於一些極端的限制,我自己曾經使用過一次,但這裏並不需要。 – helion3

+0

好的。我以前做過這件事,但這並不是很好......我不喜歡在數據超出數據庫範圍時不得不轉換數據,因此需要大量特殊功能和內容。它的工作,但..它不是便攜式或可重複使用。我喜歡@ BotskoNet的答案。 –

回答

1

有沒有更多的意義,有另一個表,讓我們稱之爲'信息',其中有user_id作爲外鍵?

所以,你必須:

CREATE TABLE user (
user_id ... 
/* necessary information */ 
); 

CREATE TABLE information (
user_id ... 
information_type /* maybe enum, maybe just string, maybe int, depending how you want to do that */ 
information_blob 
); 

然後您檢索與信息JOIN,而不必改變每次有人要添加信息的另一位表。

1

你需要一個MySQL的鍵值對系統。 NoSQL數據庫的想法是,您可以基於鍵/值創建自己的模式,基本上使用任何值作爲值。

使用field_name列創建表special_fields,或者更具體地向字段名稱命名。使用此表來定義可用的字段名稱,以及另一個表來存儲client_idspecial_field_id,然後是一個值。

所以客戶機#1將有一個地址「123 X街」(special_field記錄#1)值

我能想到的是要改變一個表中添加的架構的唯一的其他方式/刪除列。不要這樣做。

+0

這就是我正在建議的。我曾經使用過這種設置。它基本上是一個「額外的場表」......你將有三列,基本上是:'client_id +「傳真機」+「555-555-5555」'(哦,還有一個唯一的行ID ......總是) –

+0

謝謝。當Web應用程序不知道用戶需要存儲什麼時,這是一種非常常見的模式。 Wordpress是非常有名的用於自定義字段,元數據等。 – helion3

+0

絕對比JSON varchar(max)字段更好 –