【问题标题】:Database design question - field or new table + one to many数据库设计题——字段或新表+一对多
【发布时间】:2010-09-17 22:23:08
【问题描述】:

我正在为一个活动管理网站设计一个数据库 - 有一个场地表和一个活动表。每个活动都在一个场地中(存储场地的 ID),每个场地都在一个城市中。必须可以按城市搜索活动,如果城市是场所表中的一个字段(这可能由于拼写错误而导致重复的城市),或者应该有一个城市表(每个城市都有一个 id 和一个名称),并且将城市与场所(cityid、venueid)联系起来的一对多表?

我知道这是一个非常基本的问题,但我不确定额外的连接和额外的两个表是否值得。

提前致谢

[编辑] @tvanfosson:从多对多更改为一对多,因为每个场地都与一个城市相关联。

【问题讨论】:

    标签: database-design normalization


    【解决方案1】:

    使用单独的表格——这样您就有了一个城市的主列表来填充下拉列表和/或自动建议字段,并且您可以通过冗余存储 id 而不是字符串来节省空间。如果您拥有一百万个场所,而只有一千个城市,那么无论是在存储方面还是在查询速度方面,这都会大大节省 - 因为您不必从磁盘读取太多数据,而这会降低性能。

    您可能不仅应该指定城市,还应该指定州(以便您知道场地位于哪个斯普林菲尔德)。

    【讨论】:

      【解决方案2】:

      我假设这组城市是固定的、相对较小且不太可能更新(对于拼写,您总是可以添加新的)。在这种情况下,提供从 XML 文件提供的下拉列表中选择城市并将所选值存储在数据库中的列中的能力。由于输入错误的可能性,我会避免使用用户提供的输入。

      如果您的城市位于县(县)中,而县(县)位于州,那么基于表格的方法可能更合适,因为您可以在多个位置拥有同名的城市。在这种情况下,我认为使用数据库查询比通过 XML 更容易管理级联下拉菜单。

      注意:可能没有“正确”答案,因为它在很大程度上取决于您的情况。

      【讨论】:

        【解决方案3】:

        可能值得考虑使用带有城市列的地址表。

        解决方案实际上取决于其他功能是什么,以及数据库将来是否会用于其他功能。

        这也是一个主观的选择,在我看来,有一个单独的城市表可能有点太规范化了。

        【讨论】:

          【解决方案4】:

          将链接城市和场所的多对多关系转换为与附加表(类似于场所城市)的一对多关系,您可以在其中存储每个城市的所有场所,然后链接表格事件和表格场所城市将venue_city id 存储到表事件中。

          【讨论】:

            【解决方案5】:

            您可能应该有一个城市表 - 即使您现在不需要它,您也可能想要添加邮政编码,或者让城市位于各州。

            【讨论】:

              【解决方案6】:

              如果我对您的情况的理解正确,那么城市表是必须的,包括州。您可以根据需要添加新的城市/州(添加前检查表中是否存在)。这将更加高效,并且可以避免重复但拼写错误的城市名称。

              【讨论】:

                【解决方案7】:

                不要在场地中存储城市名称。而是分配一个城市 ID 并将其存储在场地中。在您加入以查找特定城市的事件之前,请从城市名称中解析 city-id 并将其用作您的加入条件。为了方便和提高性能,这可以在存储过程中实现。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-12-19
                  • 2013-12-28
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多