我正在尝试思考设计数据库的最佳方法,但我真的在脑子里转来转去找不到答案!
数据库的目的是显示计算机上安装了哪些软件。 我希望能够:
- 按位置对计算机进行分组
- 搜索软件并显示该软件的位置
- 拥有同一软件的多个版本(我还可以在其中搜索特定版本的软件)
- 了解某个位置的概况(计算某个位置有多少台机器)
- 了解某个位置的概况(显示所有可用的不同软件,以及安装了每个软件包的计算机数量 - 这让我很头疼!)
我的表格是:
- 计算机
- 地点
- 软件
- 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/