2014-08-28 7 views
0

У меня есть таблица Подписки, пассажир, адрес. Мне нужно выяснить, сколько адресов и пассажиров доступно для подписки.Как идентифицировать наличие нескольких записей в таблице?

в быстрый индекс для подписки у меня есть следующие данные

flags index name   st area cnt field name 
      addressoccupant  999  2 + Addressid 
             + Occupantid 

    pu subscription  999  1 + subscriptionid 

Адрес стол - AddressID первична уникальный Occupant стол -Occupantid является primnary уникальный

, когда я запрос я не могу найти любое кратное адрес и пассажира для подписки, но мне нужно убедиться, что он может иметь несколько адресов и пассажиров для подписчика.

Пожалуйста, дайте мне знать, как это найти.

+0

Было бы полезно увидеть пример запроса, который, по вашему мнению, может привести к нескольким результатам. Я собрал что-то вместе в моем примере ниже, но это может быть совсем не то, о чем вы спрашиваете. –

+0

Увидев информацию об индексе, мы можем подтвердить, может ли абонент иметь несколько адресов или пассажиров. – user3715001

ответ

0

Учитывая эти индексы, возможно, что у вас может быть несколько записей подписки для любого заданного адреса или пользователя.

Индекс «addressoccupant» не является уникальным, и даже если бы он был единственным, это было бы уникальным для комбинации полей addressId и OccupantId.

Чтобы избежать дублирования, вам нужно будет иметь уникальный индекс, определенный для каждого из этих полей. Подобно индексу «подписки», но без «первичного» атрибута.

Это предотвратит дубликаты, но в реальном мире люди (которые предположительно относятся к «обитателям») часто имеют несколько адресов и адресов, в которых часто проживают несколько людей. Комбинация addressId и occupantId может быть уникальным, но вы, возможно, не будете счастливы сделать уникальные поля уникальными - многое зависит от вашего приложения и фактических данных.

(Вы должны, вероятно, получить помощь от «Архитектора данных» этой системы, если есть такой человек.)

Как вы можете использовать неоднозначное ключевое слово, чтобы определить, если запрос возвращает несколько записей:

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". 
Смежные вопросы