代码之家  ›  专栏  ›  技术社区  ›  zeroef

SQL表设计辅助

  •  1
  • zeroef  · 技术社区  · 15 年前

    我正在为一个商业集团构建多个基于web的工具。许多这些工具都需要一个城市名称的管理列表。现在,每个工具都有自己的位置查找表,我希望将其集中起来,以便一个位置表可以用于所有工具,因此不需要多次添加位置。

    主人 位置表

    -----------------------------
    | LocationID | LocationName |
    -----------------------------
    |     1      |     Reno     |
    -----------------------------
    |     2      |  San Diego   |
    -----------------------------
    

    我想添加特定于每个工具但不一定相互关联的其他字段。我应该创建其他表来管理这些字段,还是根据需要将新字段添加到此位置表中?

    WebTool1 settings table
        ------------------------------------------------------
        | LocationID | HasAirConditioning|  HasSecurityGuard |
        ------------------------------------------------------
        |     1      |     TRUE          |       TRUE        |
        ------------------------------------------------------
        |     2      |     FALSE         |      TRUE         |
        ------------------------------------------------------
    
    WebTool2 settings table
        -------------------------------------------------------
        | LocationID | ServerName   |  RequiresDriveMapping   |
        -------------------------------------------------------
        |     1      | DELLSERVER1  |       TRUE              |
        -------------------------------------------------------
        |     2      |  HPSERVER3   |      FALSE              |
        -------------------------------------------------------
    

    这是个好策略吗?如果不是,为什么?

    3 回复  |  直到 15 年前
        1
  •  3
  •   John Nicholas    15 年前

    我认为这是一个非常好的策略。

    唯一的问题是,您可能希望构造约束以确保关系保持在1:1。如果它是一个平面表,这就不是问题,但很难区分哪些字段属于哪个工具。

    字段应该出现在基表中的时间是它们在所有工具中通用的时间。

    我个人喜欢我的数据库结构来反映业务。在我看来,这更像是自我记录。

        2
  •  0
  •   ulty4life    15 年前

    从纯模式的角度来看,通过某种内在的逻辑分组(而不是应用程序)来划分字段也可能更有意义。例如LocationItInfrastructure和LocationBuildingOperations或类似的操作,而不是LocationApp1和LocaationApp2。

    总的来说,我认为无论哪种方法对你个人来说最有意义,对你来说最容易使用,都是最好的解决方案。

        3
  •  0
  •   Endy Tjahjono    15 年前

    那些桌子会有多大?如果表将包含1000行或更少的行,则没有问题。但如果是100K或更大,则需要考虑如何查询这些表,因为表连接可能会变慢。