簡體   English   中英

數據庫設計:對數據感到困惑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM