[英]Database Design: Confused with data
我在Excel中為3個國家/地區提供了天氣數據:英國,法國和瑞典。 數據是一年中的每一天,因此每個國家/地區為366行。
唯一標識符是日期。 例如,所有國家/地區的共享日期與“01/04/2012”相同,只是它們的信息不同。
首先,我為每個國家創建了3個不同的表格,但我想這樣我仍然會重復相同的日期,我將不得不在網絡系統中搜索不同的表格。
現在我想將所有數據放在一個表中並添加id和country列,但這會生成更多的數據及其1100行,這可能會在以后的實現中減慢我的系統速度。
您能告訴我如何設計它,以便每個日期都參考其自己的國家和數據,但不是一直重復日期? 也許一些外鍵......?
恕我直言,更好的設計方式應該是一個單獨的表,國家和日期作為復合鍵。
這不會減慢您的系統速度,因為您可以在Country和Date列上構建索引。
從標准化系統的角度來看,一個更好的想法是使一個表具有[CountryId]
列和[Country Name]
列的[Country Name]
。
此[CountryId]
將作為主數據表中的FK參考。
你會有一張國家表
country
--------
country_id
name
和一張氣象表
weather
----------
observation_date
country_id
observation
像這樣的表
iso_country_code observation_date observation
--
GBR 2014-02-01 Clear
FRA 2014-02-01 Light rain
SWE 2014-02-01 Scattered clouds
GBR 2014-02-02 Snow
FRA 2014-02-02 Overcast
SWE 2014-02-02 Mostly cloudy
GBR 2014-02-03 Clear
FRA 2014-02-03 Snow
SWE 2014-02-03 Snow
只有一個非平凡的功能依賴。
{iso_country_code, observation_date}->observation
列{iso_country_code,observation_date}是唯一的候選鍵。 此表格為6NF。 沒有規范化指南可以將其提升到更高的正常形式。
一個改進的例子
就目前而言,SQL語句INSERT INTO weather VALUES ('SWF', '2014-02-04', 'Snow');
將成功提交,即使'SWF'顯然是一個錯字。 (沒有國家/地區的ISO國家/地區代碼為“SWF”。)
您可以通過創建有效國家/地區代碼表並設置外鍵引用來增加列iso_country_code的數據完整性。 例如,如果您使用的是SQL,則可以這樣做。
create table iso_country_codes (
iso_country_code char(3) primary key,
iso_country_name varchar(30) not null unique
);
insert into iso_country_codes values
('GBR', 'United Kingdom'),
('FRA', 'France'),
('SWE', 'Sweden');
alter table weather
add constraint
foreign key (iso_country_code) references iso_country_codes (iso_country_code);
這與規范化無關 。 數據庫設計的許多方面與規范化無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.