모든 테이블은 체인 및 표준화 데이터베이스 예를 들어 나는 모든 테이블을 조인해야 특정 국가에서 모든 사용자를 얻을 수 있습니다.
테이블이 "정규화"되어 있지 않기 때문에 대리 키 (ID 번호)를 사용하므로 모든 테이블을 조인해야합니다. ID 번호와 같은 대리 키를 사용하면 정규화와 아무 관련이 없습니다.
자연 키와 외래 키 제약 조건 만 있으면 문제를 해결할 수 있습니다.
어떻게 작동하는지 보는 가장 쉬운 방법은 전체 데이터로 시작하여 완전히 뒤로 작업하는 것입니다. 모든 데이터가 올바른 것으로 가정하십시오.
addr_id street street_num region city country
--
1 Babukiaeeva 3a 10000 Zagreb Croatia
2 Riva 16 51000 Rijeka Croatia
3 Andrije Hebranga 2-4 10000 Zagreb Croatia
4 Andrijeviaeeva 2 110000 Zagreb Croatia
는 "도시 국가 '크로아티아'에서 '자그레브'와 관련된 지역 '10000'"와 같은 사실을 기록 새 테이블을 생성하고,이 쿼리에서 그것을 채우려면.
SELECT DISTINCT region, city, country from addresses;
표는 다음과 같습니다.
Table: regions
Primary key: {region, city, country}
region city country
--
10000 Zagreb Croatia
51000 Rijeka Croatia
110000 Zagreb Croatia
그런 다음 외래 키 참조를 설정하십시오.
ALTER TABLE addresses
ADD CONSTRAINT FOREIGN KEY (region, city, country)
REFERENCES regions (region, city, country);
새 테이블을 생성, "도시 '자그레브'국가 '크로아티아'에"와 같은 사실을 기록이 쿼리를 채우려면.
SELECT DISTINCT city, country from regions;
표는 다음과 같습니다.
Table: cities
Primary key: {city, country}
city country
--
Zagreb Croatia
Rijeka Croatia
그런 다음 외래 키 참조를 설정하십시오.
ALTER TABLE regions
ADD CONSTRAINT FOREIGN KEY (city, country)
REFERENCES cities (city, country);
국가별로 반복하십시오. 표 국가, 도시 및 지역은 모두 핵심이므로 5NF에 있습니다. (키가 아닌 열이 없으므로 키가 아닌 종속성을 가질 수 없습니다.) 유럽의 모든 지역과 마찬가지로 넓은 영역의 컨텍스트에서 주소 테이블 또한 5NF입니다.
조인이 필요하지 않으므로 쿼리 성능 측면에서 현재 스키마 주위를 울릴 가능성이 있습니다.
ON UPDATE CASCADE
; 당신은 이 아니지만,은 계단식 삭제를 원합니다.
내가 말했듯이, 그것은 단순화 된 모델입니다. 이런 종류의 구조가 필요합니다. 기록의 수에 관해서는, 당신은 그렇게 세계의 어느 곳에서나 등록 할 수 있어야합니다. 그래서 게시물의 인물들은 그것을 꽤 많이 소집합니다.예측하기 힘든 사용자 수 ... 어쨌든 수십만 사용자를 처리 할 수 있어야합니다. 또한 많은 쿼리가 국가마다 다르므로 모든 것을 여러 번 추가하기가 너무 어려워 보입니다. – ZolaKt
사용자 테이블에 countryID가 있고 StateID와 a ... 등이 있습니다. 계층 구조가 필요하지 않으면 몇 가지 복잡한 비즈니스 목적, 나는 그것을 피하는 것이 좋습니다. –
좋습니다.하지만 일관성을 보장하는 방법은 실제로 사용하지 않는 모델과 같은 모델이어야합니다. – ZolaKt