Mysql 数据库设计问题,我应该防止交叉关系吗?

Mysql 数据库设计问题,我应该防止交叉关系吗?,mysql,database,database-design,Mysql,Database,Database Design,我有一个数据库,它似乎对我的数据库设计知识具有挑战性。 我会尽力解释,然后我会问这个问题 我有一份与该系统互动的公司名单,这些公司可以在我的国家内经营,只有我的国家,所有公司都致力于渔业活动。这些公司可以有产品供应商,也可以自己捕鱼。这些供应商可以在任何国家运营。从供应商处购买的产品(大多数是冷冻鱼)也可以来自任何国家,而不一定是供应商所在国。 当然,我有一个默认值设置为my country的country表,提供者和产品也会引用该表 嗯,有了这个设计,就没有办法避免关系交叉。但我真正的问题是

我有一个数据库,它似乎对我的数据库设计知识具有挑战性。 我会尽力解释,然后我会问这个问题

我有一份与该系统互动的公司名单,这些公司可以在我的国家内经营,只有我的国家,所有公司都致力于渔业活动。这些公司可以有产品供应商,也可以自己捕鱼。这些供应商可以在任何国家运营。从供应商处购买的产品(大多数是冷冻鱼)也可以来自任何国家,而不一定是供应商所在国。 当然,我有一个默认值设置为my country的country表,提供者和产品也会引用该表

嗯,有了这个设计,就没有办法避免关系交叉。但我真正的问题是

  • 允许这种情况发生是一种好的做法吗
  • 如果没有,我应该如何重新设计它来修复它
  • 如果是,为什么每个人都告诉我要防止这种关系

  • 谢谢

    好吧,让我们分析一下情况:

    这些公司可以在我国境内经营,而且只能在我国境内经营

    我假设公司由
    user
    表表示;从技术上讲,他们不需要一个国家,但展望未来,你可能希望有来自其他国家的公司

    这些供应商可以在任何国家运营

    好的,
    provider
    肯定需要他们自己的国家/地区字段

    从供应商处购买的产品(大多数是冷冻鱼)也可以来自任何国家,而不一定是供应商所在国

    所以
    产品
    也需要自己的国家/地区


    基本上,您将希望表示来自X国的产品,从Y国的供应商处购买,由Z国的公司交付。您设计的模型似乎正确地反映了这些关系。

    您的数据库设计应该可以。需要与不同国家一起定义的东西应该是。在逻辑上没有什么“交叉”的东西


    在数据库设计中,您应该避免的一件事是循环关系,即A需要B、B需要C和C需要A。

    交叉是指图形交叉?因为用户表可以移动到提供者和产品之间,从而防止一条线交叉。BTW,U.I.IdHand是VARCHAR(100),而它应该是int。是的,我知道,它可能在中间,基本上我的意思是所有的表都使用国家表,从我听到的我应该尽量避免这种情况。但我不认为这是可能的。是的,当我快速构建这个模型时,这是一个错误,对不起。我不明白为什么有必要这样做;如果所有这些实体都应该有自己的国家,那么这正是您所需要的。因此,基本上,如果一个表被其他表所需要,这种设计是可以的,但它不是圆形设计?检查是否存在圆形的一个简单方法是想象“1”是否流向“无限符号”。如果流返回到第一个“1”来自的位置,则存在循环关系。