Database-Design

如何規範化 CSV 發票數據?

  • April 1, 2019

對於帶有以下欄位的平面數據:

name

地址

地位

班級

版本

使用者

模式

定期接收 CSV 文件,以上為典型列。某些欄位,例如“類”,肯定應該有一個查找表,因為有重複的數據。

如果我要從頭開始創建它,我將有一個“類”表,以便項目表具有多對多關係:

多對多

跨越這麼多領域並建立關係有點辛苦。絕對我想從 CSV 獲取數據並進入數據庫,只是在視覺化整體結構時遇到了麻煩,因此它是關係的並且“不平坦”。

我想將數據逐步增加到3NF。模糊的問題,是的。尋找如何使用鉛筆和紙來解決這個問題的起點。

你寫了

如果我要從頭開始創建它,我將有一個“類”表,以便項目表具有多對多關係

這意味著一個項目可以在許多類中。但是,您的範例 CSV 列列表在所有其他項目列旁邊顯示一個類列。這意味著 CSV 中的每一行將僅代表一個項目和一個類之間的一種關係。

因此,如果您的數據確實在項目和類之間存在多對多關係,那麼我可以看到使用您提供的結構對其進行建模的 CSV 的唯一方法是在多行上重複一個項目 - 並且每一行指定不同的類。

如果這個結論是正確的,那麼實際上,您確實需要使用該中間表來建模多對多關係……至少對於您的班級資訊。

您的導入將如何辨識後續行重複相同的項目,並正確插入項目一次、一次類和中間連接表行(每個項目幾行) - 是一個不同的問題。但是,您打算使用中間表進行多對多建模是合理的。

但是,如果您的數據(總是)每行只有一項,那麼我很難看到 CSV 如何封裝有關與類的多對多關係的資訊,正如您所描述的那樣。如果是這種情況,那麼您不需要多對多中間表 - 只需創建您的類表並通過項目表上的外鍵關係引用它。

除了上述與您提供的範例資料結構有關的細節之外,規範化數據的過程以及選擇做出哪些決策可能需要您通讀一些有關該過程的教程。我不會連結到任何特定的連結,但是您可以找到很多。

希望以上有所幫助。

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