Здравствуйте, valker, Вы писали:
V>Уникально различать объекты я буду по идентификатору. Признаков у объекта может и не быть (а может будут, но такие, что данная версия программы с ними не работает).
V>Структура базы такая:
V>
V>Таблица Item.
V>Поля:
V> ItemID : целое, дублирование запрещено
V>Таблица IntegerProperty.
V>Поля:
V> ItemID : объект, которому принадлежит свойство
V> PropertyID : идентификатор конкретного свойства.
V> PropertyValue : значение свойства
V>
Все равно непонятно, на кой нужна таблица, содержащая уникальные идентификаторы и ничего более? ИМХО, поскольку она не несет никакой смысловой нагрузки, ее можно смело исключить вообще. И генерировать уникальные ID непосредственно на клиенте, если уж так хочется использовать непременно Access. Потому как, исходя из структуры таблицы IntegerProperty, совершенно неясно, какому объекту принадлежат эти свойства. И, если уж так жизненно важно использовать таблицу Item, тогда сделай в ней описание объекта, например, его наименование. И все будет тогда работать.
Здравствуйте, valker, Вы писали:
V>Согласен. Но! Как мне в таком случае уникально идентифицировать объекты? V>Запрос "SELECT" к этой таблице на данный момент выполняется только один раз — для поиска подходящего ID для вновь создаваемого объекта. V>Если есть другой способ узнавать новый ID, то было бы интересно узнать о нём. V>Как вариант можно просмотреть все таблицы свойств, в поисках максимальных используемых ID, но это довольно неприятно, таких таблиц всё-таки больше чем одна...
Как вариант — отказаться от акцесса и использовать более подходящую СУБД, позволяющую использовать уникальные последовательности в пределах всей структуры базы, например, Oracle или Firebird. В первом случае у тебя будет один единственный SEQUENCE, однозначно идентифицирующий все создаваемые объекты. Во втором слечае это будет генератор, выполняющий ровно те же самые функции. И дергай их на здоровье при добавлении в систему нового объекта.
Здравствуйте, Horror_Infinity, Вы писали:
H_I>например, Oracle или Firebird.
А также, множество других, имеющих в составе последовательности.
В аксесе это обойти, в принципе можно, но не нужно.
Создай рабочую табличку sequence и храни счетчики там. Но вся работа по их обновлению ляжет на тебя. А тебе оно надо?
Здравствуйте, OLEGus1, Вы писали:
H_I>>например, Oracle или Firebird. OLE>А также, множество других, имеющих в составе последовательности.
Именно!..
OLE>В аксесе это обойти, в принципе можно, но не нужно. OLE>Создай рабочую табличку sequence и храни счетчики там. Но вся работа по их обновлению ляжет на тебя. А тебе оно надо?
Мне — не сплющилось... Я таким извратом не страдаю. Если мне надо применить сквозную нумерацию объектов, я ее применяю. Правда, я не юзаю акцесс. Как-то привык ораклом обходиться.
Здравствуйте, valker, Вы писали:
V>Здравствуйте, FreeBeer, Вы писали:
V>Уникально различать объекты я буду по идентификатору. Признаков у объекта может и не быть (а может будут, но такие, что данная версия программы с ними не работает).
Предельный случай: имеем два объекта. Признаков у обоих нет, в понимании генерирующего они не эквивалентны (Нпр. собачка и кошечка у которых ножки отрезали, если брать пример с ножками).
<IMHO>
То что у Вас создано — нормальная система справочников, позволяющая построить достаточно гибко изменяемую систему. Но голый синтетический идентификатор без каких-либо дополнительных признаков(нпр. время появления в системе) недостаточен для идентификации объекта с объектом/событием реального мира.
</IMHO>
H_I> Oracle или Firebird. В первом случае у тебя будет один единственный SEQUENCE, однозначно идентифицирующий все создаваемые объекты. Во втором слечае это будет генератор,
Уже и sequence тоже
А как в Access'e с тразнакциями ? Почему просто не сделать таблицу
Counter (integer id pk, integer value)
И считать что update Counter set value=1+value where id=0 && Select value where id=0 — это аналог sequence ?
Здравствуйте, Arioch2, Вы писали:
A>А как в Access'e с тразнакциями ? Почему просто не сделать таблицу A>Counter (integer id pk, integer value) A>И считать что update Counter set value=1+value where id=0 && Select value where id=0 — это аналог sequence ?
Конфликты будут наверное. Или баги, в зависимости от...
H_I>> Oracle или Firebird. В первом случае у тебя будет один единственный SEQUENCE, однозначно идентифицирующий все создаваемые объекты. Во втором слечае это будет генератор,
A>Уже и sequence тоже
Это в двойке? Не знал, не знал... Надо будет скачать, поглядеть... Отстал я от жизни со своим ораклом.
A>А как в Access'e с тразнакциями ? Почему просто не сделать таблицу A>Counter (integer id pk, integer value) A>И считать что update Counter set value=1+value where id=0 && Select value where id=0 — это аналог sequence ?
Можно. А как это будет в многопользовательской среде? ИМХО, конфликты возникнут. Да и какова будет скорость отдачи значения этим селектом? Смотреть надо, однако...
Здравствуйте, Horror_Infinity, Вы писали:
A>>Уже и sequence тоже H_I>Это в двойке? Не знал, не знал... Надо будет скачать, поглядеть... Отстал я от жизни со своим ораклом.
Ну а какая разница? Синтаксиси сиквенсов даже более ограничен — легче воспроизводим.