Re[11]: Проблема с тривиальным INSERT
От: OLEGus1 Россия  
Дата: 12.01.06 07:15
Оценка: +2
Здравствуйте, valker, Вы писали:

V>Если есть другой способ узнавать новый ID, то было бы интересно узнать о нём.


А вот для этого тебе и придется отказаться от аксеса.
Crescite, nos qui vivimus, multiplicamini
Re[12]: Проблема с тривиальным INSERT
От: Horror_Infinity Россия  
Дата: 12.01.06 07:25
Оценка: +1
Здравствуйте, valker, Вы писали:

V>Уникально различать объекты я буду по идентификатору. Признаков у объекта может и не быть (а может будут, но такие, что данная версия программы с ними не работает).


V>Структура базы такая:


V>
V>Таблица Item. 
V>Поля: 
V>    ItemID        : целое, дублирование запрещено

V>Таблица IntegerProperty. 
V>Поля:
V>    ItemID        : объект, которому принадлежит свойство
V>    PropertyID    : идентификатор конкретного свойства.
V>    PropertyValue : значение свойства
V>


Все равно непонятно, на кой нужна таблица, содержащая уникальные идентификаторы и ничего более? ИМХО, поскольку она не несет никакой смысловой нагрузки, ее можно смело исключить вообще. И генерировать уникальные ID непосредственно на клиенте, если уж так хочется использовать непременно Access. Потому как, исходя из структуры таблицы IntegerProperty, совершенно неясно, какому объекту принадлежат эти свойства. И, если уж так жизненно важно использовать таблицу Item, тогда сделай в ней описание объекта, например, его наименование. И все будет тогда работать.
... << RSDN@Home 1.2.0 alpha rev. 624>>
Re[11]: Проблема с тривиальным INSERT
От: Horror_Infinity Россия  
Дата: 12.01.06 07:30
Оценка:
Здравствуйте, valker, Вы писали:

V>Согласен. Но! Как мне в таком случае уникально идентифицировать объекты?

V>Запрос "SELECT" к этой таблице на данный момент выполняется только один раз — для поиска подходящего ID для вновь создаваемого объекта.
V>Если есть другой способ узнавать новый ID, то было бы интересно узнать о нём.
V>Как вариант можно просмотреть все таблицы свойств, в поисках максимальных используемых ID, но это довольно неприятно, таких таблиц всё-таки больше чем одна...

Как вариант — отказаться от акцесса и использовать более подходящую СУБД, позволяющую использовать уникальные последовательности в пределах всей структуры базы, например, Oracle или Firebird. В первом случае у тебя будет один единственный SEQUENCE, однозначно идентифицирующий все создаваемые объекты. Во втором слечае это будет генератор, выполняющий ровно те же самые функции. И дергай их на здоровье при добавлении в систему нового объекта.
... << RSDN@Home 1.2.0 alpha rev. 624>>
Re[12]: Проблема с тривиальным INSERT
От: OLEGus1 Россия  
Дата: 12.01.06 07:36
Оценка:
Здравствуйте, Horror_Infinity, Вы писали:

H_I>например, Oracle или Firebird.

А также, множество других, имеющих в составе последовательности.

В аксесе это обойти, в принципе можно, но не нужно.
Создай рабочую табличку sequence и храни счетчики там. Но вся работа по их обновлению ляжет на тебя. А тебе оно надо?
Crescite, nos qui vivimus, multiplicamini
Re[13]: Проблема с тривиальным INSERT
От: Horror_Infinity Россия  
Дата: 12.01.06 07:43
Оценка:
Здравствуйте, OLEGus1, Вы писали:

H_I>>например, Oracle или Firebird.

OLE>А также, множество других, имеющих в составе последовательности.
Именно!..

OLE>В аксесе это обойти, в принципе можно, но не нужно.

OLE>Создай рабочую табличку sequence и храни счетчики там. Но вся работа по их обновлению ляжет на тебя. А тебе оно надо?
Мне — не сплющилось... Я таким извратом не страдаю. Если мне надо применить сквозную нумерацию объектов, я ее применяю. Правда, я не юзаю акцесс. Как-то привык ораклом обходиться.
... << RSDN@Home 1.2.0 alpha rev. 624>>
Re[12]: Проблема с тривиальным INSERT
От: FreeBeer  
Дата: 12.01.06 07:50
Оценка: +1
Здравствуйте, valker, Вы писали:

V>Здравствуйте, FreeBeer, Вы писали:



V>Уникально различать объекты я буду по идентификатору. Признаков у объекта может и не быть (а может будут, но такие, что данная версия программы с ними не работает).

Предельный случай: имеем два объекта. Признаков у обоих нет, в понимании генерирующего они не эквивалентны (Нпр. собачка и кошечка у которых ножки отрезали, если брать пример с ножками).

<IMHO>
То что у Вас создано — нормальная система справочников, позволяющая построить достаточно гибко изменяемую систему. Но голый синтетический идентификатор без каких-либо дополнительных признаков(нпр. время появления в системе) недостаточен для идентификации объекта с объектом/событием реального мира.
</IMHO>
Re[12]: Проблема с тривиальным INSERT
От: Arioch2  
Дата: 12.01.06 11:10
Оценка:
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 ?
Re[13]: Проблема с тривиальным INSERT
От: Пацак Россия  
Дата: 12.01.06 11:36
Оценка:
Здравствуйте, 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 ?

Конфликты будут наверное. Или баги, в зависимости от...
Ку...
Re[13]: Проблема с тривиальным INSERT
От: Horror_Infinity Россия  
Дата: 12.01.06 11:42
Оценка:
Здравствуйте, Arioch2, Вы писали:


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 ?

Можно. А как это будет в многопользовательской среде? ИМХО, конфликты возникнут. Да и какова будет скорость отдачи значения этим селектом? Смотреть надо, однако...
... << RSDN@Home 1.2.0 alpha rev. 624>>
Re[14]: Проблема с тривиальным INSERT
От: Arioch2  
Дата: 12.01.06 12:19
Оценка:
Здравствуйте, Horror_Infinity, Вы писали:

A>>Уже и sequence тоже

H_I>Это в двойке? Не знал, не знал... Надо будет скачать, поглядеть... Отстал я от жизни со своим ораклом.


Ну а какая разница? Синтаксиси сиквенсов даже более ограничен — легче воспроизводим.

http://64.233.183.104/search?q=cache:HT8BTcX21AEJ:www.ibase.ru/firebird/fb2alpha01_rn_0200_02.pdf+sequence+generator+firebird&amp;hl=ru
Re: Проблема с тривиальным INSERT
От: MishaSt  
Дата: 13.01.06 10:06
Оценка:
Насчёт ACCESS незнаю, но вот в MySql
в это поле можно NULL вставлять.

mysql> CREATE TABLE tst (Id INT AUTO_INCREMENT, PRIMARY KEY(Id));
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO tst VALUES(NULL);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM tst;
+----+
| Id |
+----+
|  1 |
+----+
1 row in set (0.03 sec)

mysql>
... << RSDN@Home 1.1.4 stable rev. 625>>
Re[2]: Проблема с тривиальным INSERT
От: OLEGus1 Россия  
Дата: 13.01.06 10:11
Оценка:
Здравствуйте, MishaSt, Вы писали:

mysql>> INSERT INTO tst VALUES(NULL);

MS>Query OK, 1 row affected (0.00 sec)

не. не хляет
Crescite, nos qui vivimus, multiplicamini
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.