关系数据库结构请求

时间:2016-05-03 08:37:51

标签: mysql relational-database filemaker

我正在开发一个关系数据库,并坚持如何完成某些事情。

我有很多桌子,但其中有两个是问题。我有几千种海洋物种,称为“物种”。我有另一个表,其中包含分为188个不同子区域的全球海洋,称为“subRegions”。当然,每个物种都可以在多个子区域中找到。 subRegions表的字段为“id”,“name”和“coordinates”。

从种类id中设置subRegions id的外键很容易,但是如何设置它以便可以同时显示每个物种的多个区域?

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

所以你所拥有的是一种多对多关系,可选择参与每种关系。所以你会发现你的物种没有,一个或多个子区域;每个subRegion可能包含没有,一个或多个物种。

实现这一点,你将有一个中间表来记录这种关系。那就是你的新表叫做speciesSubRegions。该表将包含species_id和subRegion_id作为复合主键。

然后,这种关系看起来物种与speciesSubRegions有一对多的关系,可选择参与物种方面,并强制参与speciesSubRegions方面。

然后subRegions与speciesSubRegions有一对多的关系,这在subRegions方面是可选的,在speciesSubRegions上是强制性的。

清除泥土?

答案 1 :(得分:0)

通过中间表关联物种和子区域提供了一些优势,但我相信在某些应用中,创建另一个表可能有点过分。我意识到这个问题已经得到解决,但是下面我已经提供了一种不同的方法来实现目标,而无需创建额外的表。

一种简单快捷的方法来完成与多个子区域相关的物种。

  1. 在物种表中创建一个新文本字段。你可以称之为“associated_sub_regions。”
  2. 在子区域表中建立关联子区域与主键之间的关系。应该看起来像 species :: associated_sub_regions = subRegions :: id
  3. 对于每个物种,在“associated_sub_regions”文本字段中添加每个关联子区域的主键。在每个主键之后,添加回车符。所以它应该看起来像ID返回ID返回ID返回。
  4. Filemaker将每个返回视为关系的不同值,因此此时您可以根据应用程序的设置显示相关数据。

    • 如果您创建一个基于subRegions的门户网站,它只显示来自物种的相关值,那么它将显示与当前物种相关的所有子区域。这只适用于基于物种的表格,因为这种关系是根据物种的背景来评估的。
    • 如果您的主控表或控制表仅用于导航,那么您可以按照以下步骤在使用脚本设置值后在任何布局上显示相关的子区域。
      1. 在控制台上为“current_species_id”创建一个新文本字段,该字段将包含某个人正在查看或已选择的活动种类。
      2. 建立关系 control :: current_species_id = species2 :: id
      3. 建立关系 species2 :: id = subRegions2 :: ID

    如果要从门户中选择物种,可以设置脚本触发器以将“current_species_id”字段设置为所选门户行的ID,然后使用另一个基于subRegions2的门户来显示关联的子区域。然后,您可以对这些子区域执行任何操作。选择以获取更多信息,或创建新窗口。这只是实现相同目标的另一种方式,但比新表更依赖于关系。同一工作的不同工具。