数据库建模、结构和关系

Database Modelling, Structures, and Relationships

目前我正在设计一个数据库模型,该模型将用作库存系统的数据库。但是,我在数据库结构方面遇到困难,特别是我是否会为父 table 添加一个额外的列,因为它是子 ID。

下图中显示的是我目前正在处理的数据库的一部分。我正在处理规范化表单,这就是它已经有多个 table 的原因。但是,在 Shipment Table(以蓝色突出显示)中,在这种情况下,Shipment Details(以红色突出显示)的父级 table 我不知道是否应该为 shipment [= 添加一个额外的列20=] 以识别或连接到货件详细信息 table。

我已经为 Shipment Detail 添加了一个外键,用于识别它与哪个 Shipment 相关 我只是不知道是否应该为 Shipment table 中的详细信息添加另一个 ID 列。更具体地说,我应该为 Shipment table 添加一个 "Shipment Detail ID" 列吗?我担心如果我包含它可能会导致裁员。

视情况而定。如果您希望 Shipment 有很多 ShipmentDetails,那么不要,因为您要在 Shipment table 中为每个子项重复 ShipmentDetailId,从而违反 1FN。

如果您有“1 对 1”关系,则可能没有必要拥有两个 table,因为您可以在货件 table 中拥有所有东西。

我见过 tables 的列数量变得太大了,但是我从未见过将不同的 tables 中的列分开的性能提升。

希望对您有所帮助!

如果每个shipment正好有一个shipment detail

shipment {SHIPMENT_ID, ...}
      PK {SHIPMENT_ID}


shipment_detail {SHIPMENT_ID, ...}
             PK {SHIPMENT_ID}

             FK {SHIPMENT_ID} REFERENCES
       shipment {SHIPMENT_ID}

如果每个shipment可以有多个shipment detail

shipment {SHIPMENT_ID, ...}
      PK {SHIPMENT_ID}


shipment_detail {SHIPMENT_ID, SHP_DET_NO, ... }
             PK {SHIPMENT_ID, SHP_DET_NO}

             FK {SHIPMENT_ID} REFERENCES
       shipment {SHIPMENT_ID}

备注:

All attributes (columns) NOT NULL

PK = Primary Key
AK = Alternate Key (Unique)
FK = Foreign Key