2009-08-06 6 views
0

У меня есть компания A. Мне нужна возможность связать эту компанию с несколькими штатами, и каждое государство, в свою очередь, может быть связано с несколькими городами. Например:Лучший способ хранения и выбора нескольких штатов/городов для компании?

Company A 
     \ 
      - State A 
        |-City A 
        |-City B 
     \  |-City C 
      - State B 
        |-City A 
        |-City B 
     \  |-City C 
      - State C 
        |-City A 
        |-City B 
        |-City C 

Мои вопросы:

  1. Что такое лучший способ сохранить это в таблице?
  2. Что является самым простым способом разрешить пользователю выбирать это без обновления нескольких страниц?

Я использую ASP.NET (Framework 3.5) с C#. Если есть какие-либо элементы управления, которые могут это сделать, лучше всего будет указатель на них.

Спасибо,

Джим

Edit: Например, мне нужно выбрать "Компания А". Затем выберите «State A». В разделе «Государство A» я выбираю «Город A, B & C». Затем выберите «State B» и под этим выберите «City A & B».

ответ

2

Вы, вероятно, хотите сохранить это в четырех таблицах

 
**Companies** 
Name OtherInfo CompanyID 

**States** 
Name OtherInfo StateID 

**Cities** 
Name StateID CityID OtherInfo 

**CompaniesInCities** 
CompanyID CityID 

Таким образом, государства и города могут существовать без компании.

Что касается элемента управления для их выбора, если вы хотите выбрать один город, лучшим вариантом будет AJAX CascadingDropDownList.

Выполнение этого без обновления нескольких страниц, по крайней мере, если я вас правильно понимаю, будет чрезвычайно сложным и, вероятно, запутанным для пользователя. Лучше всего сделать их максимально безболезненными, что может включать или не включать использование AJAX.

+0

CascadingDropDownList не разрешает несколько выборок. Например, мне нужно выбрать «Компания А». Затем выберите «State A». В разделе «State A» я выбираю «City A, B & C». Затем выберите «State B» и под ним выберите «City A & B». Я не уверен, что структура БД, которую вы предложили, помогает с этим ... – Jim

+0

Структура БД должна работать, но вы правы в CascadingDropDown. Похоже, вы хотите CascadingDropDown, пока не дойдете до части Cities, где вы хотите CheckBoxList. Это не должно быть сложным для кода вручную. –

+0

Обратите внимание на то, что компания связывается с городом, а город связывается с государством. Не связывайте компанию с городом и штатом, или вы создаете возможность несогласованных данных, например. города «Майами, Флорида» и штата «ГА». (Если эта точка поражает вас как очевидную, отлично!Но если это так, вы на несколько миль впереди людей, которые разработали базу данных sucky, с которой я должен работать каждый день ...) – Jay

0

Чтобы ответить на первый вопрос, я бы хранить это что-то вроде:

 
STATE 
---------------------------- 
STATE_KEY      NOT NULL NUMBER                                               
COUNTRY      NOT NULL VARCHAR2(3) (ISO 3-letter code)                                            
STATE_SHORT     NOT NULL VARCHAR2(30)                                             
STATE_NAME      NOT NULL VARCHAR2(30) 


CITY 
---------------------------- 
CITY_KEY      NOT NULL NUMBER                                               
STATE       NOT NULL NUMBER (FK into STATE)                                       
CITY_NAME      NOT NULL VARCHAR2(30)                                             
LAT          NUMBER                                               
LOG          NUMBER 

COMPANIES 
---------------------------- 
STATE_ID NUMBER NOT NULL  (FK into State) 
.... Other Data Cols..... 


Одна вещь, которую вы могли бы рассмотреть возможность сделать это, чтобы связать компании с ключом города и FK в город вместо этого, и есть такие города, как usa; fl; null и usa; ca; null, чтобы представлять все города в этом состоянии. Таким образом, переход к компаниям, основанным на определенном городе, не меняет вашей общей схемы. Если вы знаете, что всегда будете иметь дело с компаниями, связанными с государствами, то делать state_id в компаниях (как показано выше) будет предпочтительным.

Удачи вам в вашем проекте.