我有一个表订阅,占用者,地址。我需要找到多个地址和占用者可用于订阅。
在订阅的快速索引中我有以下详细信息
flags index name st area cnt field name addressoccupant 999 2 + Addressid + Occupantid pu subscription 999 1 + subscriptionid
地址表 - addressid是主要唯一的 乘员表-Occupantid是原始的独特
当我查询时,我找不到订阅的任何多个地址和占用者,但我需要确保它可以有多个地址和占用者用于子文章。
请告诉我如何找到这个。
答案 0 :(得分:0)
鉴于这些索引,您可以拥有任何给定addressId或occupantId的多个订阅记录。
“addressoccupant”索引不是唯一的,即使它只是在addressId和occupantId字段的组合上也是唯一的。
为防止重复,您需要为每个字段定义唯一索引。类似于“订阅”索引,但没有“主要”属性。
这样可以防止重复,但在现实世界中,人们(可能会映射到“占用者”)通常有多个地址,地址通常会有多个人居住在其中。 addressId和occupantId的组合可以合理地唯一,但您可能不乐意使各个字段唯一 - 很大程度上取决于您的应用程序和实际数据。
(如果有这样的人,你应该从这个系统的“数据架构师”那里获得帮助。)
您可以使用AMBIGUOUS关键字来确定查询是否返回多个记录:
find subscription no-lock where addressid = 34 no-error. /* "34" is just a made up example... */
if available subscription then
message "found one!".
else if ambiguous subscription then
message "more than 1 :(".
else
message "no records".