database - 这是数据库的良好设计吗?

标签 database database-design

我有四张 table 。制造品、生产工厂、ProducitonLine 和机器。机器是用于制造某些产品的机器。

一个制造商可以有很多工厂,一个工厂可以有很多生产线,也可以有很多机器。所以所有的关系都是 1:N。

因此表具有以下字段:

Manufactures      (IDManufacture,...)
ProductionPlant   (IDProductionPlant, IDManufacture,...)
ProductionLine    (IDProductionLine, IDPlant,...)
Machines          (IDMachine, IDProductionLine,...)

然而,这使得机器必须始终安装在生产线上以进行生产,但有时可以卸载、不使用机器,但它仍然是制造商的属性(property)。

在设计中,如果我将机器表中的 IDProductionLine 字段设置为 null,那么我就无法知道有这台机器的制造商。

所以第一个解决方案是向 Machines 表添加其他字段,即 IDManufacture,这样我可以设置 null IDProductionLine 但仍然可以知道所有者。

但我怀疑这是否是一个好的解决方案,因为这会在关系中形成一个循环,因为从 Machines 中,我可以通过 IDMachine 或 LineProduction-->PlantProduction 了解制造。这是一个问题还是一个好的解决方案?

何时消除循环以及何时允许有循环?

谢谢。

最佳答案

我会将机器(特定产品线中的机器库存)与您的机器类型分离,以使其更加规范化 -

Manufacturer
 1:N
Prod Plant
 1:N
Prod Line
 1:N
Machine Inventory
 N:1
Machine Type

机器类型表将为公司使用的每种机器类型存储 1 行,机器库存将包含特定产品线中使用的机器的每个实例的唯一信息。使用这种结构,您将能够从产品线中删除一台机器,并且仍然在您的数据库中维护有关该机器的详细信息。如果您使用同一台机器的多个实例或在不同的产品线或工厂中使用相同类型的机器,这种结构也会减少冗余,因为所有这些机器库存行都会指向机器类型。

关于database - 这是数据库的良好设计吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14062011/

相关文章:

c# - SQL 中的 "Dynamic"表?

python - Django/SQL : keeping track of who who read what in a forum

java - 在 Google App Engine 上按最新创建的顺序接收实体

php - SQL 搜索查询(使用 LIKE)优先列

database - 用于移动设备的 Flex - 使用数据库

c# - 多客户端 Web 应用程序设计

java - Android 从数据库获取数据到编辑 TextView 时遇到问题

database - 在设计用于数据挖掘的数据库模式时应该注意什么?

database-design - 数据库中的EmailAddress字段长度

mysql - 电话资费网站的 ERD - 这是最佳选择吗?