Mysql

簡單的數據庫結建構議

  • January 27, 2016

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,typestatus- 如果是,為什麼?

將所有列放在一個表中是否有任何缺點?

最終的 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(原子性、一致性、隔離性、持久性),這是精心設計的數據庫的屬性。我確定我忘記了一些基本概念,但有很多理由使用規範化。

引用自:https://dba.stackexchange.com/questions/127458