【问题标题】:Best way to store and select multiple states/cities for a Company?为公司存储和选择多个州/城市的最佳方式?
【发布时间】:2009-08-06 14:10:42
【问题描述】:

我有 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# 一起使用。如果周围有任何控件可以做到这一点,那么指向它们的指针也将不胜感激。

谢谢,

吉姆

编辑:例如,我需要选择“A公司”。然后选择“状态A”。在“State A”下,我选择“City A, B & C”。然后选择“State B”,然后选择“City A & B”。

【问题讨论】:

    标签: asp.net sql-server database-design logic


    【解决方案1】:

    您可能希望将其存储在四个表中

    **公司** 姓名 OtherInfo CompanyID **状态** 名称 OtherInfo StateID **城市** 名称 StateID CityID OtherInfo **CompaniesInCities** 公司 ID 城市 ID

    这样,州和城市可以在没有公司的情况下存在。

    就选择它们的控件而言,如果要选择单个城市,AJAX CascadingDropDownList 可能是最佳选择。

    至少在我理解正确的情况下,在没有多次页面刷新的情况下执行此操作将非常困难,并且可能会让用户感到困惑。最好的办法是让它们尽可能轻松,这可能涉及也可能不涉及使用 AJAX。

    【讨论】:

    • CascadingDropDownList 不允许多选。例如,我需要选择“A 公司”。然后选择“状态A”。在“State A”下,我选择“City A, B & C”。然后选择“State B”,然后选择“City A & B”。我不确定您建议的数据库结构是否对此有帮助...
    • 数据库结构应该可以工作,但您对 CascadingDropDown 的看法是正确的。听起来您想要一个 CascadingDropDown,直到您到达需要 CheckBoxList 的 Cities 部分。手动编码应该不难。
    • 注意重点,公司与城市相连,城市与州相连。不要将公司与城市和州联系起来,否则您可能会产生不一致的数据,例如城市“迈阿密,佛罗里达州”和州“GA”。 (如果这一点让你觉得很明显,那就太好了!但如果是这样,你比那些设计我每天都必须与之合作的糟糕数据库的人领先几英里......)
    【解决方案2】:

    要回答您的第一个问题,我会将其存储为:

    状态 ---------------------------- STATE_KEY NOT NULL NUMBER COUNTRY NOT NULL VARCHAR2(3)(ISO 3 字母代码) STATE_SHORT NOT NULL VARCHAR2(30) STATE_NAME NOT NULL VARCHAR2(30) 城市 ---------------------------- CITY_KEY NOT NULL NUMBER STATE NOT NULL NUMBER(FK 到 STATE) CITY_NAME NOT NULL VARCHAR2(30) 后数 日志编号 公司 ---------------------------- STATE_ID NUMBER NOT NULL(FK 进入状态) .... 其他数据列......

    您可能会考虑做的一件事是将公司链接到城市密钥,并将 FK 链接到城市,并拥有像 usa;fl;null 和 usa;ca;null 这样的城市来代表该州内的所有城市。这种方式转换为基于特定城市的公司并不会真正改变您的整体方案。如果您知道您将始终与与州相关的公司打交道,那么最好在公司中使用 state_id(如上所示)。

    祝你的项目好运。

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 2017-06-17
      • 1970-01-01
      • 2012-06-13
      • 2021-02-09
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多