세 가지 다른 테이블이 필요하지 않습니다! 세 개의 열 (city
, state
, region
)이있는 하나의 표가 필요합니다.
그 이유는 city
이 단독으로 존재하지 않기 때문입니다. 미국에서 스프링 필드 (일리노이 주)를 고려하십시오. 그리고 스프링 필드, MA. 또는 마이애미, 플로리다 및 마이애미, 오하이오. 보유하고있는 것은 계층 구조가있는 데이터의 차원입니다. 이것을 저장하는 올바른 방법은 다른 정보를 제공하는 "차원"표를 사용하여 가장 낮은 수준 (도시의 경우)입니다.
원래의 데이터가 정확하다는 것을 가정 할 때, 당신은 같은 것을 할 수 있습니다
create table Cities (
CityId int auto_increment not null primary key,
City varchar(255),
State varchar(255),
Region varchar(255)
);
insert into Cities(City, State, Region)
select distinct City, State, Region
from YourTable;
내가이 "표준 정규 형태"아니라고 알고 있습니다. 그러나 대부분의 응용 프로그램에서이 방법이 효과적입니다. 예를 들어 목록에서 상태를 선택하려는 응용 프로그램에서이 작업을 수행하는 경우 상태에 대한 인덱스를 만들면 쿼리가 빨라집니다.
상태 및 지역 수준에서 별도의 표를 원할 수있는 경우가 있습니다. 이러한 수준에서 다른 열이 많이있는 경우에도 마찬가지입니다. 특히 인 경우 해당 열의 값을으로 수정하십시오. 데이터가 정적 일 때 평평한 치수 (여기에 설명 된 것과 같은)가 가장 적합합니다 (도시에서는 상태가 자주 변경되지 않음). 표준화는 여러 수준에서 값을 변경할 때 가장 적합합니다.
이것은 몇 가지 기본 SQL 쿼리를 통해 쉽게 달성 할 수 있습니다. 이 노력을 시작하려했는데 특정 문제가 발생 했습니까? –
또한이 경우 정규화 수준에 대한 필요성을 질문 할 수 있습니다. 도시를 단지 당신의 애플리케이션에서 별개의 객체로 취급하려고한다면 지역과 주정부는 단지이 객체의 속성 일뿐입니다. 도시를 국가 및 지역이있는 자체 테이블로 끌어 올 것입니다. 물론 주 및 지역을 일류 객체 (즉, 지역 및 주마다 고유 한 속성을 가짐)로 취급 한 다음 정규화합니다. –
안녕하세요. 감사합니다. 네, 저는 단지 ... 오늘 뇌염으로 죽었습니다. 나는 거기에 포함 된 별개의 정보가있을 것이므로 지역 차원에 대한 정규화가 필요하다. 나는 국가 수준을 위해 동일한 것을 예기하고있다. 그래서 나는 그것이 미안보다 더 안전하다고 생각한다? – Benshack