【问题标题】:Best Way to Design a large table for use in ASPX设计用于 ASPX 的大表的最佳方法
【发布时间】:2014-09-26 19:41:05
【问题描述】:

我已经发布了几次有关链接表的帖子以显示不同的结果,并且有几个非常好的人帮助我完成了。

但它开始让我怀疑我是否设计了错误的表格以解决这些问题。

例如,我有 2 个表 tblrunplan 和 tblplaces

tblrunplan 有 20 个访问字段(可以是重复的位置),每个字段都有一个 placeID 编号 tblplaces 包含每个地点的所有详细信息。

在我的头脑中,这是正常化的,对吗?

如果是这样的话,那么在显示运行计划信息时,我显然不想显示 PlaceID 编号,而是显示来自 tblplaces 的 Place Names。

我该怎么做?无需打开 20 个 tblplaces 实例,每个实例都有一个连接。

TBLPLACES:
PlaceID
Place Name
Lat
Long
Address 1
Address 2
Town
Contact Number

TBLRUNPLAN:
RunID
Visit1
Visit2
Visit3
Visit4
Visit5
Visit6
etc.

【问题讨论】:

  • 当您提到“重复位置”时,您的意思是这些存储为行还是列?
  • 不,我的意思是同一个地方可以在同一个运行计划中多次使用
  • 你能发布一个表模式的 sqlfiddle 吗?可能会更容易理解。
  • 由于代表原因,我不让我发布架构的 img,但添加了基本表结构
  • 这不是一个规范化的方案。您最好添加一个Run 表(ID、日期或类似的东西)和中间表RunPlan(id、runid、placeid)。这样你就可以在跑步期间访问任意数量的地方..

标签: asp.net sql-server database-design relational-database foreign-key-relationship


【解决方案1】:

如我的评论中所述,我将用 Run 表(ID、日期、与运行相关的额外数据)替换 TblRunPlan,并使用新的 RunPlace 表来记录每次运行都会访问地点(id、RunID、PlaceID、VisitOrder)。

这将确保您拥有灵活且可扩展的架构。您拥有的RunPlan 表的问题是您必须为每次运行的固定数量(20)个位置保留空间。即使您每次运行可能不会访问 20 个地方,您仍然会消耗存储空间。

如果您将来决定每次运行访问 25 或 15 个地点,则无需更改架构中的任何内容,而使用现有架构则必须添加或删除列。

然后,您可以使用以下方式检索信息:

SELECT
   R.RunID, R.date, RP.VisitOrder, P.Place_Name
FROM 
    Run R
    JOIN RunPlace RP ON R.RunID = RP.RunID
    JOIN Place P ON RP.PlaceID = P.PlaceID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2021-10-23
    • 1970-01-01
    • 2017-03-11
    相关资源
    最近更新 更多