Denormalization

當所有數據都依賴於主鍵時,我應該將表拆分為不同的表嗎?

  • September 13, 2015

對於我的任務,我必須為我的許可申請建立一個數據庫。我有 12 列,其中一列用於許可證密鑰。所有其他列都是與許可證密鑰相關的數據。許可證密鑰總是不同的。我被告知最好將表拆分為更多表以刪除冗餘數據。表格如下:

license_code

product_amount

product_limit

product_name

start_date

end_date

first_registration_date

most_recent_check_date

registration_end_date

hardware_id

IP

status

目前我把它分成這個:

表:許可證

license_code*

product_id*

start_date

end_date

first_registration_date

most_recent_check_date

registration_end_date

product_amount

product_limit

hardware_id

IP

狀態

表:產品

產品 ID*

產品名稱

我真的認為沒有必要拆分它,因為所有數據都依賴於 license_code 列。誰能幫我嗎?謝謝。

編輯:解釋如何使用

許可證密鑰/程式碼基本上是一個唯一的字元串。要使用產品(軟體程序),必須使用許可證密鑰。一個產品可以用多個License Key啟動,第1個人可以用程式碼X來啟動Y產品,第2個人可以用Z程式碼來啟動Y產品。所以一個License Key可以啟動一個產品的多個實例,但只能用於單一產品。

我希望我對這個解釋更清楚。

我認為我們缺乏一些資訊,例如許可證的確切用途以及如何使用它。例如,所有產品都只有一個許可證嗎?許可證可以包含多個產品嗎?由於使用了許可證一詞,我想每個人都有自己的許可證來使用該產品(因此是一對多的關係)。在這種情況下,我將假設一個許可證僅對一個產品有效,並且多個許可證可以引用一個產品(一對多關係)。

所以為了滿足這個要求,我們需要兩張表。一份用於產品,一份用於許可證。產品表將包含所有產品資訊,例如:

Products
-----------
ProductID
Name,
Description,
Price,
(etc)

Licenses
--------
LicenseID,
ProductID,
StartDate,
EndDate,
Amount, -- I believe this is to represent how many individual licenses of this one is used
Limit,  -- And this is to represent how many people can use this current license
(etc)

有了這個,我們有一些好處。現在,我們可以將單個產品許可給多個人(再次,我假設該產品類似於軟體),我們現在可以在不影響產品的情況下更改許可,如果我們需要對產品進行更改,所有許可會自動更新。一個很好的例子是產品描述的改變。如果產品與許可證一起儲存,我們將不得不更改使用同一產品的所有許可證。這不好,而且容易出現不一致的數據。

如果我不在基地,請隨時告訴我。正如你所看到的,我做了很多假設。

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