连接3个表的SQL数据库设计

时间:2014-07-02 15:35:59

标签: mysql sql database

我正在考虑设计数据库的最佳方式,而且我真的在脑子里跑来跑去,无法得出答案!

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

  • 按地点分组计算机
  • 使用该软件搜索软件和显示位置
  • 拥有相同软件的各种版本(我也可以搜索特定版本的软件)
  • 概述某个位置(计算某个位置的计算机数量)
  • 概述某个位置(显示所有可用的软件,以及安装了每个软件包的计算机数量 - 这让我感到非常头疼!

我的表格是:

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

表格分解为:

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

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

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

请帮助我!

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

谢谢, 约什

1 个答案:

答案 0 :(得分:0)

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