2011-08-08 42 views
4

我想知道是否將數組作爲JSON字符串存儲在mysql文本字段中是很好的做法。PHP/MySQL - 將數組數據存儲爲JSON,不好的做法?

我創建的發票允許用戶將無限數量的產品添加到發票中。當表格被提交時,它會取出所有的空白項目等,但我通常會留下2-5個項目。每件商品都有SKU,價格,名稱和描述。

我對這種情況的選項是:(1)創建一個新的產品表,添加每個項目作爲一個新行,帶發票錶鏈接它,和訪問數據時要調用兩個表。或者(2)將所有產品數據作爲單個JSON文本字段存儲在發票表中,然後我不創建或訪問另一個表。

由於我與MySQL編程相當剛性,給我的感覺是,在MySQL的使用JSON會讓人不悅。我對嗎?有人可以對此有所瞭解嗎?

回答

13

如果你所需要的只是 - 那麼它是不是一個不好的做法。

但是,如果你需要執行任何類型的處理,排序或類似的東西 - 你需要規範化它。

+0

太棒了,謝謝你的回答。這實際上是非常有意義的,直到我需要允許按產品搜索/排序,那麼我認爲我會沒事的。 – Tim

+0

如果你開始實施數據庫邏輯,那麼你做錯了什麼。這是我使用SQL數據庫時的經驗法則。 – tjameson

+0

雖然我沒有看到什麼時候可以。你說的基本上是正確的,但是當你保存這樣的產品時,你一定想知道哪些訂單有sku xxx。或者嘗試輕鬆添加產品線到訂單。或者真的做任何事情。添加一個具有每行訂單的表格並帶有id,orderid,sku,price,name,descripiton字段並不難。也許更晚些時候。我不認爲有任何理由不這樣做。它不像加入這個表格會導致性能問題。 – Nanne

0

我不是MySQL專家,但我認爲這取決於你想完成什麼。您希望您保存到發票中的產品是可搜索的嗎?如果是這樣,那麼最好使用關係數據庫結構。

如果你沒有必要進行搜索,你可以存儲數據作爲JSON字符串,或僅僅作爲一個序列化的陣列,並保存自己使用JSON的。

真的取決於您的需求。

0

如果將其存儲在JSON中,將無法使用SQL查詢它。例如,我無法找出哪些買了超過3產品A的

5

因爲其他人更直接地回答你的問題的所有發票,我要帶邊緣的方法和解決未來的可維護性代替。

將可變數量的項目只是乞求成爲一個數據庫實體(SKU,Price,Name,Description)作爲JSON現在可能沒問題,但它會導致大量的數據重複。

取而代之,按照您的說法爲所有產品創建一個表格。然後爲invoices_have_products創建另一個表格。然後,您可以從發票ID匹配的invoices_have_products中提取每一行,然後從products中提取每行,其中產品ID與從invoices_have_products中提取的行匹配。

它可能會有點單調乏味的權利,但如果所有的數據是整齊的表格,輕鬆可查詢,你會更快樂。想想使用JSON運行數百萬個文本字段的報告的噩夢。絕對可怕。

要回答你的問題的一部分:不,我不認爲這是好的做法,它看起來有點像不好的做法,是誠實的。

相關問題