在sql中添加表之间关系的最佳方法

在sql中添加表之间关系的最佳方法,sql,database,Sql,Database,我有四张桌子:公司、子公司、表格和货物 每个公司包含多个子公司,每个子公司包含表单 每一张表格都包含货物 我需要查询以获取公司的fomrs、子公司的表格、公司的货物、子公司的货物 我的问题是哪种关系更好?我选择第二种关系,因为我认为它更容易查询,也更快 仅添加之间的关系 公司---->子公司---->表格---->货物 添加公司和所有三个表之间的关系、子公司和其他两个表之间的关系以及表单和货物之间的关系。 似乎表单和货物有一个组合关联,而子公司和表单也有一个组合关联,因此它们之间应该存在一对

我有四张桌子:公司、子公司、表格和货物 每个公司包含多个子公司,每个子公司包含表单 每一张表格都包含货物

我需要查询以获取公司的fomrs、子公司的表格、公司的货物、子公司的货物

我的问题是哪种关系更好?我选择第二种关系,因为我认为它更容易查询,也更快

  • 仅添加之间的关系

    公司---->子公司---->表格---->货物

  • 添加公司和所有三个表之间的关系、子公司和其他两个表之间的关系以及表单和货物之间的关系。


  • 似乎
    表单
    货物
    有一个组合关联,而
    子公司
    表单
    也有一个组合关联,因此它们之间应该存在一对多关系。 到目前为止,您的头号设计似乎更好,但问题是
    公司
    表单
    之间的关系是什么?如果
    子公司
    可以有表格,那么
    公司
    也可以有
    表格
    吗?(拥有
    表格
    公司
    或其
    子公司
    ?)如果
    公司
    本身不能拥有
    表格
    ,那么数字1似乎是一个合理的设计,但如果可以,那么你应该对其进行一些更改,比如:

    Company has a one to many self relation (Sub Company)
    Company has a one to many relation with Form
    Form has a one to many relation with Cargo   
    

    在这种设计中,
    子公司
    没有单独的实体,每个拥有母公司的
    公司
    都是该公司的
    子公司

    第一个更好。第二个包含冗余信息,这通常是一件坏事,尽管有时这种非规范化是在速度确实需要时进行的,但您可能不需要它。一个普通的数据库没有3个连接的问题。如果有,则在保持关系正常化的同时,以其他方式进行改进。不,一家公司不能有表单,但有很多公司每10秒都会收到其子公司表单的报告,因此我决定在公司和表单之间添加一个关系,以便更快地向公司查询和显示子公司的表单,但似乎我错了也许你最好有一个视图,根据子公司显示每个公司的每个表格。