2017-02-19 26 views
0

我創建了一個爲每個產品生成150個「序列號」的php系統。 現在我想將這些序列號存儲在數據庫中。還有,我發現這樣做的一些方法:如何傳遞和處理數據(php)到數據庫(mysql)以獲得最佳性能?

  1. 創建一個表名products_serialNumber每個SERIALNUMBER存儲1條記錄和使用product_id關鍵是涉及到產品。

如果我這樣做,我會有很多數據可能沒有人使用它。但以這種方式獲取數據更容易,速度更快。

  1. 創建一個表名product_serialNumbers並存儲每個產品的serialnumbers數組,並且相關的是再次使用「product_id」鍵。

如果我不喜歡這樣,我會爲每個產品序列號記錄,但我應該用更多的foreachfor loop函數來提取數據和變量的陣列中使用的地方,我需要,並使用大量的的記憶。我使用內存限制在64米以內。

回答

2

你可以存儲JSON ...

規範化是用來優化數據庫結構的技術。第一範式(1NF)規則規定每列應該保存一個值 - 這是通過存儲多值JSON文檔來破壞的。

創建具有JSON字段

CREATE TABLE `product_serialNumbers` (
    `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
    `title` varchar(200) NOT NULL, 
    `serialNumbers` json DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

表格添加JSON數據

INSERT INTO `product_serialNumbers` (`title`, `serialNumbers`) 
VALUES (
    'ECMAScript 2015: A SitePoint Anthology', 
    '["ac111", "ab177", "ac14521"]' 
); 

JSON也可以與所創建的:

//returns [1, 2, "abc"]: 
SELECT JSON_ARRAY(1, 2, 'abc'); 

//returns {"a": 1, "b": 2}: 
SELECT JSON_OBJECT('a', 1, 'b', 2); 

//returns ["a", 1, {"key": "value"}]: 
SELECT JSON_MERGE('["a", 1]', '{"key": "value"}'); 

搜索JSON數據

//all product_serialNumbers with the 'ac14521' serialNumbers: 
SELECT * FROM `product_serialNumbers` 
WHERE JSON_CONTAINS(serialNumbers, '["ac14521"]'); 
1

如果您使用ORM數據庫像Mysql,最好的選擇是使用解決方案1,因爲存儲和提取相關數據是使用ORM數據庫的最重要原因。 但是,當您使用MongoDB或其他文檔庫數據庫等NoSql數據庫時,解決方案2是很好的選擇。

1

解決方案1是好事,因爲在這兩種情況下,數據空間將被採取。

如果你使用解決方案2或保存在json中,每次檢索數據都需要解析json,這些json會比較慢並且消耗內存。所以,要利用SQL連接。

解決方案1將在內存消耗方面更快,更便宜。不要擔心太空,現在空間不是挑戰,而是效率。如果你認爲這些數據是無用的,你爲什麼要存儲它?

+0

如果創建5個產品,我會在我的'產品'表中創建5條記錄,如果使用解決方案1,我將在'serial_numbers'中有750條序列號的記錄! (5 * 150 = 750) –

+0

那麼它有什麼問題呢? –

相關問題