Mysql 将实体放在层次结构中,或作为查找表的属性?

Mysql 将实体放在层次结构中,或作为查找表的属性?,mysql,database-design,relational-database,Mysql,Database Design,Relational Database,比如说,我的公司正在生产医疗产品,这些产品用于许多不同的实验室测试仪器。业务逻辑层次结构如下所示: A lab has multiple locations (Up to thousands) A location has multiple departments (Chemistry, Hematology, 3-5 per location) A department has multiple instruments (No more than 10-20 instruments per l

比如说,我的公司正在生产医疗产品,这些产品用于许多不同的实验室测试仪器。业务逻辑层次结构如下所示:

A lab has multiple locations (Up to thousands)
A location has multiple departments (Chemistry, Hematology, 3-5 per location)
A department has multiple instruments (No more than 10-20 instruments per location)
An instrument has many products.(No more than 1-5 product types per instrument)
表结构当前反映了业务逻辑,如左侧所示。我建议我们做一个小的改变,显示在右边


每种方法的优缺点是什么?我觉得左手边的方法可能会慢一点,因为在一行中链接了这么多连接

我所看到的右侧方法的最大缺点是你失去了部门和地点之间的联系。对于您在文章顶部描述的关系,左侧的结构从设计角度来看是正确的

然而

你的设计意味着你圣安东尼奥工厂的质谱仪的ID与你丹佛工厂的不同。这是有意的吗

---------评论中讨论后的修订---------

您已经描述了几个多对多关系-一个位置将有多个仪器,多个位置可以有相同的仪器,例如质谱仪。为了支持这一点,您需要交叉引用表。这是初步的草图。我的标准是调用表的主键ID,任何名为[table name]\u ID的字段都是对应表的外键:

Lab
    ID
    Name

Location
    ID
    Lab_ID
    Street_Address
    City
    etc.

Department
    ID
    Name

Location_Department    -- this lists the departments at a given location
    ID
    Department_ID
    Location_ID

Instrument        -- Scale, Oscilloscope, Mass Spectrometer, etc.
    ID
    Name
    Description

Location_Department_Instrument    -- inventory at a given location
    Location_Department_ID
    Instrument_ID
    Instrument_Serial_Number

让我知道这是否有意义。

圣安东尼奥的质谱仪应该与帕洛阿尔托的质谱仪具有相同的仪器id,但PK id不同。还有什么我需要更改的吗?此外,失去部门和地点之间的关系是否重要?大多数实验室都有相同的部门。在同样的意义上,大多数公司都有一个人力资源部,一个财务部,等等。啊,我想我明白你在做什么了。给我几分钟的时间,我会更新我的主要答案和一些想法。哦,你是对的,我没有注意到多对多的关系!谢谢。还有,那个位置是不是连接位置、部门和仪器?这不应该是部门和仪器之间的桥梁吗?没关系,我想我明白了。这就是你的设计吗?如果不知道将要使用的选项,就很难判断模式。而且,有时编写SELECT会指出模式中的缺陷。