簡單的數據庫結建構議
dba 新手。我正在創建一個 php/mysql 庫存列表,並且在開始之前想要一些關於建構我的表和數據庫的建議。
庫存數據庫最終將包含數百個項目,並且不斷增加(可能達到數千個)。目前數據包含在我可以訪問的 .xls 工作表中,它包含以下內容;
items
(用於顯示目的的虛擬數據)+--------+-------+------+-----------+---------+------+-----------+----------+----------------+----------+--------+----------+ | itemId | invNo | make | model | ip | room | dataAdded | dateMod | description | location | type | status | +--------+-------+------+-----------+---------+------+-----------+----------+----------------+----------+--------+----------+ | 1 | 234 | HP | 765 | 123.123 | 54 | 01-02-16 | 02-01-16 | some desc here | floor 1 | server | active | +--------+-------+------+-----------+---------+------+-----------+----------+----------------+----------+--------+----------+ | 2 | 765 | Dell | Precision | 123.123 | 34 | 02-01-16 | 03-01-16 | some desc here | floor 3 | pc | active | +--------+-------+------+-----------+---------+------+-----------+----------+----------------+----------+--------+----------+ | 3 | 987 | Dell | Precision | 123.123 | 65 | 05-09-15 | 07-09-15 | some desc here | floor 1 | server | inactive | +--------+-------+------+-----------+---------+------+-----------+----------+----------------+----------+--------+----------+
我可以將所有這些列添加到我的數據庫中的一個表中,還是應該將這些列分開不同的表?
例如,我應該為
location
,type
和status
- 如果是,為什麼?將所有列放在一個表中是否有任何缺點?
最終的 Web 應用程序將允許使用者創建、讀取、更新和刪除項目。以及搜尋項目並按類型/位置等過濾…
我通常使用 MySql Workbench 或 PhpMyAdmin 來創建和設計數據庫。
任何建議表示讚賞。
理論是你應該隔離不同目的、功能或特性的元素,在這種情況下,像 invoiceNum、品牌、型號、位置和類型這樣的欄位是正常的候選人,可以住在他們自己的表中,並且在此只引用他們的 ID 號表,但這在很大程度上取決於應用程序本身。
您所要求的稱為“規範化”,您可以從網上獲得很多範例:
https://blog.udemy.com/normalization-in-database-with-example/ https://en.wikipedia.org/wiki/Database_normalization
簡單的建議是:是的,至少在可能的情況下獲得第 1 和第 2 規範化形式,這將使您將來的生活更輕鬆。
編輯:我忘了回答“為什麼”你應該在不同的表格中區分不同的目的數據:有很多原因,但即使在提供的連結中得到更好的解釋,我們也可以用以下幾點來恢復它:
- 您的數據將具有較少的冗餘,您可以指向一個數字,而不是在數千或數百萬條記錄中重複相同的字元串。
- 您的數據將更容易修改:如果您必須將 ‘Motorbike’ 更改為 ‘Water Motorbike’,您只需將其更改為一行(相比之下更容易,而且速度更快)。
- 您的數據將更加一致,因為您可以在不同的表中擁有相同的概念,並更新一個表的所有“摩托車”,但其他表的那些。如果您已經對錶格進行了規範化,您可以在一個表格中對其進行更改,並且會影響所有相關表格,不僅是您可以記住數據所在的位置。
- 由於它更有條理,插入、更新和搜尋得到了難以置信的改進。
這通常稱為 ACID(原子性、一致性、隔離性、持久性),這是精心設計的數據庫的屬性。我確定我忘記了一些基本概念,但有很多理由使用規範化。