Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 当产品差异很大时,设计产品数据库模式的最佳方法是什么?_Database_Database Design_Relational Database_Database Schema_Filemaker - Fatal编程技术网

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

Database 当产品差异很大时,设计产品数据库模式的最佳方法是什么?,database,database-design,relational-database,database-schema,filemaker,Database,Database Design,Relational Database,Database Schema,Filemaker,我正在尝试使用FileMaker14设计一个产品数据库。我们的产品主要有: 适配器:HDMI到显示端口;USB到VGA;USB到以太网;SD/微型SD卡/小型闪存读卡器等 扩展底座:USB-C至显示端口/HDMI/USB-A 2.0/USB-A 3.0/USB-C 3.0/USB-C 2.0/AUX-in/AUX-out等 USB集线器:2/4/6/8/10端口USB集线器,可通过总线或电源适配器供电,带或不带以太网等 将来可能会有其他类型的产品 我希望数据库能够输出规格表,其中包括: 型

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

  • 适配器:HDMI到显示端口;USB到VGA;USB到以太网;SD/微型SD卡/小型闪存读卡器等

  • 扩展底座:USB-C至显示端口/HDMI/USB-A 2.0/USB-A 3.0/USB-C 3.0/USB-C 2.0/AUX-in/AUX-out等

  • USB集线器:2/4/6/8/10端口USB集线器,可通过总线或电源适配器供电,带或不带以太网等

  • 将来可能会有其他类型的产品

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

  • 型号
  • 产品名称
  • 图像(打印一张,笔记本电脑或平板电脑上显示多张)
  • 上游接口(各种视频、数据、音频)
  • 下游接口(各种视频、数据、音频)
  • 电源(总线或电源适配器、不同类型的电源适配器)
  • 尺寸
  • 重量
  • 操作环境
  • 支持的操作系统
我已经尽可能地将它们规范化,但是我对如何实现接口感到困惑。我想我有以下几种选择:

  • 把它们放在一张桌子里

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

    其中,每个字段的值将是数量

  • 把他们分开

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

  • 选项1看起来真的很混乱


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

    除了极少数例外,只要您有许多Y(接口)与一个X(产品)相关,您就应该将它们放在单独的表中。当联接本身具有属性(例如示例中的数量)时,就不会有异常

    OTOH,我不明白为什么需要第三个表(“接口”)。除了显示的字段外,还有其他字段吗?如果没有,自定义值列表就足够了


    警告
    一定不要想得太多。有时,接口列表只是字段中的文本。这完全取决于您的解决方案打算实现什么。当您需要跟踪哪些接口在哪些产品中使用时,由联接表支持的多对多关系非常有用,可以快速创建/修改产品的接口,可能会产生一些统计数据(例如“X类功能接口Y中80%的产品”)等。否则,这只会浪费资源

    啊,那么你是说选项二是可行的方法,但是只使用ProductInterfaces表?Interfaces表就在那里,因为不知何故,我认为最好将重复字段放在一个单独的表中,并使用主键作为减少冗余的方法;例如,使用自动生成的数值作为InterfaceID,而不是一次又一次地使用HDMI。
    此外,我必须承认,我不太了解FileMaker中自定义值列表的工作原理……”所以你是说选项二是可行的,但仅使用ProductInterfaces表?“是的。--”“我认为最好的做法是将重复字段放在一个单独的表中,并使用主键作为减少冗余的一种方式。”通常,这是正确的。但是
    HDMI
    123
    一样独特和永久,重复
    HDMI
    并不比重复
    123
    更冗余。“一般来说,这是真的。”对不起,我有点困惑。。。你能给我指出一个链接,在那里有更详细的解释吗?我不太清楚在什么情况下应该这样做。如果除了HDMI、USB-A等之外,我还有一个版本号字段(USB 3.0、3.1 Gen 1、HDMI 2.0等),单独的表格会更好吗?如果有额外的字段,那么表格将不可避免。此外,如果该类型在该表中不是唯一的(如您的示例所示),则还需要一个无意义的ID。
    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...)