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

标签 mysql sql database

我正在尝试思考设计数据库的最佳方法,但我真的在脑子里转来转去找不到答案!

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

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

我的表格是:

  • 计算机
  • 地点
  • 软件
  • software_computer_relation_table

表格分割为:

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

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

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

请帮助我!

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

谢谢, 乔什

最佳答案

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

关于mysql - 连接3个表的SQL数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24535334/

相关文章:

sql - 尝试将两个表从一个数据库迁移到另一个数据库时陷入困境

c# - 如何在sql server中获取这一列的总和

sql - 在两列上使用 COUNT 和 GROUP BY 进行非常慢的 SQL 查询

java - 如何在 Flyway 的不同文件中分隔每个脚本?

mysql - 以分钟为单位计算两个日期之间的时间差

mysql - In '' mysql'' pid 文件的管理器在没有更新文件的情况下退出

php - Laravel 5.2 将查询从 Controller 移至模型

c# - 如何使用 LINQ 按多个列排序

php - mySQL查询只获取显示

mysql - 需要 Wordpress 数据库 SQL 查询帮助