当产品差异很大时,设计产品数据库模式的最佳方法是什么?

What is an optimal way to design a product database schema when products can vary greatly?

我正在尝试使用FileMaker 14设计产品数据库。我们的产品主要有:

我希望数据库能够输出规范 sheet,其中包括:

我已尽我所能将它们规范化,但我对 接口 的实现方式感到困惑。我认为我有的选项:

  1. 将它们合二为一table

    ProductUpstreamInterfaces:
    ProductID (primary foreign key)
    USB-A2
    USB-A3
    USB-B
    USB-C2
    USB-C3
    Thunderbolt1
    Thunderbolt2
    Thunderbolt3
    AUX-in
    AUX-out
    HDMI
    .
    .
    .
    

    ProductDownstreamInterfaces:
    ProductID (primary foreign key)
    USB-A2
    USB-A3
    USB-B
    USB-C2
    USB-C3
    Thunderbolt1
    Thunderbolt2
    Thunderbolt3
    AUX-in
    AUX-out
    HDMI
    .
    .
    .
    

    其中每个字段的值都是数量。

  2. 拆散他们

    ProductInterfaces:
    ProductID (primary foreign key)
    InterfaceID (foreign key)
    Quantity
    Direction_1Up2Down (1 for up; 2 for down)
    

    Interfaces:
    InterfaceID (primary key)
    Interface (eg. HDMI/DisplayPort/USB-C2/USB-C3/AUX-in/AUX-out, etc...)
    

选项1看起来真的很乱。

选项 2 似乎更好,但我不确定我是否会 运行 遇到任何问题......这两个哪个更好?有更好的方法吗?

除了极少数例外,只要您有许多 Y(接口)与一个 X(产品)相关,就应该将它们放在单独的 table 中。当join本身有属性时(比如你例子中的Quantity),也不会有例外。

OTOH,我不明白你为什么需要第三个 table ("Interfaces")。除了显示的字段外,它还有其他字段吗?如果没有,自定义值列表应该就足够了。


警告

请确保您没有想太多。有时,接口列表只是字段中的文本。这完全取决于您的解决方案打算实现的目标。连接 table 支持的多对多关系在您需要跟踪哪些接口在哪些产品中使用时很有用,能够快速 create/modify 产品的接口,也许生成一些统计数据(例如“80% 的类别 X 中的产品具有界面 Y”)等。否则,这只是浪费资源。