2012-06-10 4 views
7

Tôi cần trợ giúp thiết kế quốc gia, thành phố, bảng tiểu bang của mình. Tôi sẽ cung cấp dữ liệu mẫu từ bảng của tôi để bạn có thể giúp tôi tốt hơn về vấn đề của mình.cách tốt nhất để thiết kế thành phố, tiểu bang, bảng quốc gia là gì?

Đây là bảng nước của tôi:

Country 
______ 
code name 
US  United States 
SG  Singapore 
GB  United Kingdom 

Đây là bảng thành phố của tôi:

City 
_____ 
id country city  state 
1 US  Birmingham Alabama 
2 US  Auburn  Alabama 
. 
. 
29 GB  Cambridge NULL 
30 GB  Devon  NULL 

Vấn đề của tôi là quốc gia duy nhất có lĩnh vực nhà nước là Mỹ. Tất cả các thành phố khác đều có giá trị null.

Giải pháp tạm thời của tôi cho việc này là chỉ cần tạo một bảng thành phố đặc biệt cho Hoa Kỳ, sau đó tất cả các quốc gia khác có một bảng thành phố khác không có trường tiểu bang.

Tôi nghĩ điều này sẽ làm phức tạp vấn đề, bởi vì tôi có hai bảng cho các thành phố.

Làm cách nào để cải thiện thiết kế này?

+0

Giải pháp xuống và bẩn là tải xuống Virtuemart và sử dụng bảng quốc gia/tiểu bang từ đó - có hơn 200 hạt và tất cả các trạng thái có liên quan, sau đó thêm vào thành phố của bạn – GDP

Trả lời

2

Tại sao không phải là bộ bảng được liên kết 3 chiều chuẩn?

table country (
    id int primary key, 
    name varchar(255) 
); 

table state (
    id int primary key, 
    name varchar(255), 
    country_id int foreign key country (id) 
); 

table city (
    id int primary key, 
    name varchar(255) 
    state_id int foreign key state (id) 
); 

này sẽ giữ cho hầu hết trường hợp, ngoại trừ một số ít những người thoái hóa như Lloydminster, Saskatchewan, nằm giữa hai biên giới tỉnh.

+0

Xin chào, bảng thành phố vẫn có state_id. nếu thành phố không có tiểu bang thì sao? chuyện gì sẽ xảy ra? tôi thực sự gặp khó khăn khi suy nghĩ theo ba bảng. nó làm tôi đau đầu. –

+0

Tôi nên làm gì nếu state_id trong bảng thành phố không có giá trị? –

+0

Thành phố tồn tại không có tiểu bang? ví dụ. Singapore? –

5

Tại sao không đi quan hệ?

Country (CountryID, CountryCode, CountryName) 
Region (RegionID, RegionCode, RegionName, CountryID) 
City (CityID, CityCode, CityName, RegionID) 

Tên 'Khu vực' lớn hơn nhiều so với Bang, có nghĩa là nó có thể có ý nghĩa hơn ở mọi nơi.

+0

ic, ok bệnh thay đổi nó vào khu vực. cảm ơn cho những lời khuyên –

0

Có rất nhiều quốc gia ngoài Hoa Kỳ có phân cấp chính trị giữa cấp quốc gia và thành phố. Úc có các bang, Canada có các tỉnh, Nhật Bản có các tỉnh, và vv.

Câu hỏi đặt ra là làm thế nào để bạn theo dõi thông tin này và giữ cho thông tin đó nhất quán? Bạn có thể có một "hồ sơ giả" ở cấp độ trung bình cho các quốc gia không có. Một cách khác để xử lý điều này là để chuẩn hóa các khóa ngoại cho tất cả các cấp xuống đối tượng chứa địa chỉ. Nếu quốc gia và thành phố là bắt buộc thì các khóa ngoại của chúng sẽ không có giá trị trong khi FK của bạn có thể bị vô hiệu.

Nếu bạn đi tuyến đường không chuẩn hóa, bạn sẽ cần logic ứng dụng để đảm bảo rằng khóa ngoại của bạn nhất quán với nhau.

Nếu bạn đi tuyến đường ghi trạng thái giả, bạn sẽ cần logic ứng dụng để đảm bảo rằng các lớp giả được ẩn khỏi người dùng trong giao diện người dùng.

+0

có, kế hoạch của tôi là bình thường hóa điều này. mục tiêu đầu tiên của tôi là để có được tất cả các tiểu bang cho Hoa Kỳ. sau đó tôi sẽ thêm các nước vào Úc trong tương lai. tôi cần một thiết kế bảng linh hoạt có thể xử lý các thay đổi trong tương lai –