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

时间:2018-01-22 17:32:22

标签: 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 location)
An instrument has many products.(No more than 1-5 product types per instrument)

表结构当前镜像业务逻辑,如左侧所示。我建议我们做一个小改动,显示在右边。

enter image description here

每种方法有哪些优点和缺点?我觉得左侧方法可能会因为链接这么多Joins而慢一点。

1 个答案:

答案 0 :(得分:1)

最大的" con"我看到右边的方法是你失去了部门和位置之间的关联。对于您在帖子上方描述的关系,从设计角度来看,左侧的结构是正确的。

...无论其

您所拥有的设计意味着您在圣安东尼奥工厂的质谱仪将具有与您在丹佛工厂不同的ID。那是为了吗?

------------------在评论中讨论修改------------------

您已经描述了几个多对多关系 - 一个位置将有多个仪器,多个位置可以拥有相同的仪器(例如质谱仪)。为了支持这一点,您需要交叉引用表。这是一个初步草图。我的标准是调用表的主键" ID"以及任何名为" [table-name] _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

如果这是有道理的,请告诉我。