【问题标题】:SQL database design linking 3 tablesSQL数据库设计链接3个表
【发布时间】:2014-07-02 15:35:59
【问题描述】:

我正在努力思考设计数据库的最佳方法,但我真的在脑子里转来转去无法想出答案!

数据库的目的是显示计算机上安装了哪些软件。 我希望能够:

  • 按位置对计算机进行分组
  • 搜索软件并使用该软件显示位置
  • 拥有同一软件的不同版本(我也可以在其中搜索特定版本的软件)
  • 了解一个位置的概况(计算一个位置有多少台机器)
  • 了解某个位置(显示所有可用的不同软件,以及每个软件包安装了多少台计算机 - 这让我很头疼!

我的桌子是:

  • 计算机
  • 位置
  • 软件
  • software_computer_relation_table

表格分为:

  • 计算机表中包含计算机名称和位置 ID
  • 位置表包含位置 ID,以及位置细分(建筑物、楼层号和房间号)
  • 软件表包含软件ID、软件名称和版本号(如果软件名称相同,但版本号不同,则创建新行
  • software_computer_relation_table 这包含计算机名称的 ID 和软件的 ID(不能使用软件名称作为主键,因为创建了多个不同版本的行)。

我遇到的主要问题是,当我尝试概述可用软件的位置时(忽略版本),以及在该位置安装了该软件的计算机数量,因为软件表 softwarename 列不是唯一的(因为可以有不同的版本),一个位置可能会出现更多的软件安装该机器实际可用(因为软件名称可以在一台机器上出现两次,因为版本号不是包括)。

我认为解决方案是创建一个计算机表、软件名称表和一个软件版本表(链接回软件名称表)但是我想不出如何将所有三个表链接在一起我想要的方式。

请帮帮我!

非常感谢您提供的任何帮助/指导/最佳实践!我是 SQL 新手 :)

谢谢, 乔什

【问题讨论】:

  • 请参阅thisthis 了解基表选择。有关查询组合,请参阅 thisthis。 (或使用“语句”搜索和浏览我的答案。)

标签: mysql sql database


【解决方案1】:

您的架构应该可以工作。进行 1 次更改 - 第 4 个表应该有计算机 ID,而不是名称。您将在位置 ID 上加入(我将使用数字 1-4 作为您的表格)1 和 2;软件 ID 上的 2 和 4。软件 id 上的 3 和 4(不确定您是否担心名称 - 您设计的 id 是跟踪它的正确方法,因为供应商确实更改了名称)。显然 1、2 和 4 使用了前两个连接。

【讨论】:

  • PS - 如果您认为它们不起作用,请发布您的问题。
  • 非常感谢您的快速回复!对此有点困惑,您说过要在软件 ID 上加入 2 和 4,但是如果我只有位置 ID(例如房间号),当我想查看所有软件 ID 时如何指定软件 ID房间内?我之前的做法是通过位置 ID 获取所有计算机,然后将结果与计算机/软件关系表连接起来,然后将其与软件名称连接起来以获取房间内的软件,并将软件名称一起添加到获取安装总数。但是因为我没有指定...
  • 版本,1 台计算机可能会报告多次安装软件(不同的版本,但我不知道如何将其分开),然后因为我将软件名称的实例添加到位置,最终结果可能是一个房间希望拥有比实际更多的计算机。希望这是有道理的。软件表如下所示: Softwarename: Softwareversion: GIMP 2.3.1 GIMP 4.2.1 GIMP 5.2.3 虽然电脑只安装了 GIMP,但 SQL 认为它有 3,因为我没有包括版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多