Filemaker门户:每条记录有多个密钥

时间:2015-09-02 15:04:10

标签: filemaker


(编辑)
拥有一个具有自我关系的表:与项目/项目相关。 记录B需要有2个键:蓝色&红色(当然,在真实的桌子中颜色将是id's)
我不希望所有的红色记录都显示在记录X的门户网站上 我该怎么做?

enter image description here

4 个答案:

答案 0 :(得分:1)

为了实现图片中显示的结构,您的items表应如下所示:

<强>或者:

ItemID  ItemName    ChildItemsIDs
A       Alpha
B       Bravo
C       Charlie
D       Delta
X       Xray        A¶B
Y       Yankee      B¶C¶D

符号表示回车)

,关系应定义为:

items::ChildItemsIDs = items_related::ItemID

items_related:的门户放置在items的布局上。

ItemID  ItemName    ParentItemsIDs
A       Alpha       X
B       Bravo       X¶Y
C       Charlie     Y
D       Delta       Y
X       Xray        
Y       Yankee

关系定义为:

items::ItemID = items_related::ParentItemsIDs

这两个选项之间的选择取决于您是要为父母选择子女还是为子女选择父母。

注意
您正在描述items与其自身之间的多对多关系。 &#34;适当&#34;解决方法是使用连接表,其中每个链接的项目对都是单独的记录。

Filemaker允许您通过使用如上所示的multi-valued key来实现多对多关系而无需连接表。但是,这种便利性存在缺点:您无法记录特定于连接的任何属性,并且生成报告更加困难(门户网站在分页符中打印不好)。

答案 1 :(得分:0)

一些选择:

首先,如果您打算对主键使用顺序整数(在大多数情况下不推荐使用),则您的字段应该是数字字段,而不是文本字段。根据您设置自我加入的方式,更改此选项可能会立即解决您的问题。

然而。尽管将多键用于FileMaker关系是有效的,但使用常规多对多连接通常更好。为此,您需要设置一个单独的连接表,其中包含“父”记录(您正在查看的记录)作为“左”辅助密钥,以及“子”记录(您希望在门户中显示的记录)作为“正确的”辅助密钥,您将主表事件加入到由此新连接表连接的关系图中的新辅助TO。通过这样做,您可以获得一个坚如磐石的机制来执行您想要的操作,以及在此连接表中特定于“子”的每个实例的特定“父”的后续字段的能力。强烈推荐。

答案 2 :(得分:0)

另一个注意事项:注意到有关门户网站过滤器的新添加文字:

为此,您需要设置笛卡尔联接(使用关系图中的&#34; X&#34;运算符,创建一个&#34;看到&#34;所有其他记录的关系(然后在自连接的情况下,也是当前记录本身。然后应用门户过滤器,将对关系中的每个记录进行评估:创建一个表达式,当对给定的相关记录求值时评估true,记录显示;否则,记录被隐藏。

这是一种诱人的方法,起初,你很可能喜欢它。但是,它可能会随着时间的推移而失败。原因是当您添加更多记录或在LAN和WAN环境中传递数据时,此技术变得越来越慢 - 通常太慢而无法使用。此外,过滤后的门户网站仍然可以看到&#34;所有未过滤的记录,所以这种方法会阻止你对这些相关记录做其他事情,比如获得第一个,第二个记录,得到它们的总数等等。

答案 3 :(得分:0)

你的解释非常令人困惑。我将尝试根据我对您的问题的理解来提供帮助

你有一个与自我相关的表“项目”;另一个表出现名为“items_related”

你的关系不是一对多。如果你有一对多,我会建议你有一个名为foreingKey_Father的字段并以这种方式建立关系:“items :: foreignKey_Father = items_related :: primaryKey”

如果您的关系更复杂,解决此问题的正确方法是使用连接表。它可以被命名为“JT_itemToItemRelated”,其中包含两个字段“foreignKey_item”和“foreignKey_itemRelated”。这样,门户网站将根据连接表的记录过滤相关项目。

如果您希望关系基于文本字段中的多个相关ID,您可以(但不应该)这样做。你所要做的就是制作items :: variousPrimaryKeys = items_related :: primaryKey。这不是一个更好的做法。

如果你能提供更多关于你想要完成什么的信息,那就会更快。