2010-08-26 182 views
0

我试图制定出一个关系数据库的概念,我遇到了一些概念性的问题:关系数据库概念

  1. 如果我有“嵌套”的多个分立的实体相互/有层次例如:

老板可以有多个员工。这些员工有不同的项目,一个项目又有多个部分。

所以

B1-Bn: 

     E1-En 

      P1-Pn 

       Section1 -SectionN 

怎么会是这样最好在数据库映射?

换句话说,这个层次结构如何在关系数据库中最好地映射?

  1. 现在我有Costumers与这些员工进行交互。

他们遇到老板 然后他们决定哪个员工会为他们工作。 然后他们被分配了一个或多个部分的项目。

这将如何最好地映射。

  • 关系1-n中,M-N,1-1:可以它们可用于例如为:
  • 这是因为,1-n的关系的一个ForeignKey。 由于m-n关系,这是一个ManytoManyField。

    1. 是否有一个优秀的在线工具来更好地理解/可视化。

    非常感谢您的时间!

    回答

    1

    您可能想要关注关系数据库设计课程;这个题目需要几天时间才能解释或掌握。但你在正确的轨道上。

    你可能会看到的第一件事是一个层次结构,但在你知道它之前会有不分层的关系,所以形成了一个网络。 这就是为什么关系数据库不能使用层次结构。

    您可以确定不同类型的实体并且每种类型都有一个表。

    对于每个实体类型,您可以确定这些实体的属性 - 每个属性都是该表的一列。 如果一个属性没有原子值,而是一个结构化值,那么这些结构化值必须被视为一个实体,并且必须给它自己的表,并且该属性将是引用该表的外键。

    通过这种方式,您将形成由外键链接的表格网络。这被称为实体关系图。许多设计人员主张首先创建这样的图表,而不直接将实体类型映射到表格。它们允许图中实体类型之间的多对多关系。另一方面,表之间的外键始终是多对一或1对1。所以这些设计师有一个“实施”步骤,在这个步骤中,他们为每个多对多关系引入一个附加表格。就我个人而言,我不会在我的图表中使用多对多的关系。

    +0

    好答案!非常感谢!让它更清晰! – MacPython 2010-08-31 15:34:26

    +0

    谢谢...还有很多棘手的问题,例如如何识别实体(有些人对所有事物都使用ID列,其他人避免像鼠疫一样),规范化(在维基百科上解释不佳)等。 – reinierpost 2010-08-31 20:06:13