Normalization

該表打破了哪些規範化規則

  • July 7, 2018

我們以前的 DBA 已經厭倦了開發團隊頻繁請求更改數據庫模式以添加和刪除列。然後,他向開發人員建議,他將創建具有以下定義的簡單表。

+---------------+---------+
| Record Number | VarChar |
+---------------+---------+
| Column Name   | VarChar |
+---------------+---------+
| Column Value  | VarChar |
+---------------+---------+

因此,如果開發人員想要一個通常如下所示的表格

+-------------+---------------+-----------------+
| Employee ID | Employee Name | Employee Salary |
+-------------+---------------+-----------------+
| 0001        | John Doe      | 100000.00       |
+-------------+---------------+-----------------+
| 0002        | Jane Doe      | 110000.00       |
+-------------+---------------+-----------------+
| 0003        | Jack Doe      | 120000.00       |
+-------------+---------------+-----------------+

他們可以按以下方式添加行

+---------------+-----------------+--------------+
| Record Number | Column Name     | Column Value |
+---------------+-----------------+--------------+
| 1             | Employee ID     | 0001         |
+---------------+-----------------+--------------+
| 1             | Employee Name   | John Doe     |
+---------------+-----------------+--------------+
| 1             | Employee Salary | 100000.00    |
+---------------+-----------------+--------------+
| 2             | Employee ID     | 0002         |
+---------------+-----------------+--------------+
| 2             | Employee Name   | Jane Doe     |
+---------------+-----------------+--------------+
| 2             | Employee Salary | 110000.00    |
+---------------+-----------------+--------------+
| 3             | Employee ID     | 0003         |
+---------------+-----------------+--------------+
| 3             | Employee Name   | Jack Doe     |
+---------------+-----------------+--------------+
| 3             | Employee Salary | 120000.00    |
+---------------+-----------------+--------------+

這顯然不符合氣味測試,讓我想分析一下這樣的設置會破壞什麼數據庫規範化。

這會破壞1NF嗎?2NF ? 3NF ? BCNF ? 解釋會很好。

這是一個可怕的模式,但它實際上並沒有破壞任何規範化規則。原因是它實際上改變你正在建模的內容。它不是對您的數據庫建模,例如員工,而是對實體、屬性和值進行建模。

我同意大衛布朗的回答和拉馬克的評論。他們對我的分析幫助很大。

正如 Lamak 在他的評論中提到的,這樣的模型被稱為EAV 模型。儘管 EAV 模型可能不會違反任何規範化規則,但它應該主要用於對可用於描述它們的屬性(屬性、參數)的數量可能很大的實體進行建模,但實際應用於給定的數量實體比較適中。EAV 模型是一種高效的數據儲存方式,但效率低下且難以查詢。

域的實體具有明確定義的屬性的情況下,關係模型更加優越和可取。當這樣的模型在RDBMS中實現時,使用者可以利用強大的 RDBMS 功能,如高效的儲存技術和強大的查詢能力。

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