powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / прошу совет об INDEX
9 сообщений из 9, страница 1 из 1
прошу совет об INDEX
    #32716488
Alex Sheff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Есть таблица (например список товаров) с уникальным полем KOD (Index - primery).
какого типа поле (integer/numeric/character) лучше использовать, в чем разница ындексирования по этим типам полей.
2) Для уникальности кода в default value прописываю SYS(3) - это правильно (всмысле невылезет ли мне это потом боком в каких то ситуациях)
Всем спасибо
...
Рейтинг: 0 / 0
прошу совет об INDEX
    #32716641
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раздел "Ключевое поле"
http://www.foxclub.ru/kb/index.php?sid=24056&aktion=artikel&rubrik=001&id=6&lang=ru

Индексы
http://www.foxclub.ru/kb/index.php?sid=29869&aktion=artikel&rubrik=004&id=57&lang=ru

Sys(3) теоретически может дать повторяющееся значение. Если я правильно понимаю, то эта функция использует системную дату. Значит, есть вероятность дублей при:

-) Играх с системным таймером (изменение даты и времени)
-) При работе в многопользовательском режиме (генерация с разных машин)

Однако Primary - индекс отловит эту ошибку (возможное дублирующее значение) и не просто не даст создать запись.

Собственно, об этом есть в описании к функции SYS(3)

HELP VFP6SYS(3) may return a non-unique name when issued successionally on a fast computer.

Чтобы этого избежать, логичнее использовать специальные функции для генерации GUID (полно в интернете) или же использовать автоинкремент (через специальную служебную таблицу, хранящую последний использованный или первый не использованный код в указанной таблице)
...
Рейтинг: 0 / 0
прошу совет об INDEX
    #32716665
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Sheff1) Есть таблица (например список товаров) с уникальным полем KOD (Index - primery).
какого типа поле (integer/numeric/character) лучше использовать, в чем разница ындексирования по этим типам полей.
2) Для уникальности кода в default value прописываю SYS(3) - это правильно (всмысле невылезет ли мне это потом боком в каких то ситуациях)
Всем спасибо

Отвечаю:
1) Все зависит от того, будет ли это поле еще где-то использоваться (например, в каких-то отчетах) кроме обеспечения связи между файлами и какой "физический смысл" смысл этого поля. Например, в практике моей работы, было использование ключевого поля (читай KOD) в качестве артикула (номенклатурного номера). При этом поле имело сложную структуру: <группа>.<№ внутри группы>. В этом случае без поля типа character было не обойтись (артикулы 2.18 и 2.180 - суть разные изделия, а в поле типа Numeric такие различия нивелируются)! Если нет подобных ограничений, то какое поле использовать - дело вкуса.
Если, конечно, быть до конца пунктуальным, то индексирование по полю типа character должно занимать больше времени, чем по integer/numeric, так как строки сравниваются во-первых, по длине, во-вторых, посимвольно.
Но, я так считаю, на современных компьютерах эта разница не будет ощущаться...
2) В Help'e к VFP5 указано, что на быстрых машинах функция SYS(3) может давать одинаковые значения при последовательном обращении к ней. Для уменьшения вероятности совпадений рекомендовано использовать функцию sys(2015). Эта функция строит значение на основе системных даты и времени (с точностью до миллисекунд). Если два обращения к функции идут в течение одного интервала (нескольких миллисекунд), то функция также возвращает два одинаковых значения :-(. Но, если речь не идет об интенсивной (!)многопользовательской (20-50-100 человек) работе, такое маловероятно...
...
Рейтинг: 0 / 0
прошу совет об INDEX
    #32716736
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет SYS(2015)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
start=SECONDS()
z=SYS( 2015 )
FOR i= 1  TO  1000000 
	x=SYS( 2015 )
	IF x=z
		WAIT 'qqq' wind
	ENDIF
	z=x
ENDFOR
?SECONDS()-start
Вот такая нехитрая штука у меня выполняется за 1.844 сек... Ни одного совпадения! Почему???
P.S. Заранее прошу прощения, если "натормозил"... Бессонная ночь... :-(
...
Рейтинг: 0 / 0
прошу совет об INDEX
    #32716743
MarinaVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Primary они же Unique индексы не поддерживаются Rushmore оптимизацией
...
Рейтинг: 0 / 0
прошу совет об INDEX
    #32716788
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MarinaVPPrimary они же Unique индексы не поддерживаются Rushmore оптимизацией
Марина, Вы куда-то не туда посмотрели.

Primary - это вовсе не то же самое, что и Unique в среде FoxPro. Как говроят в Одессе - это две большие разницы.

Primary - физически запрещает создание двух записей с одинаковым значением ключа. Используется при Rushmore-оптимизации

Unique - физически допускает создание двух и более записей с одинаковым значением ключа. Но отображает только одно из этих повторяющихся значений. НЕ используется при Rushmore-оптимизации. Не рекомендуется использовать в более старших версиях. Оставлен для совместимости. В дезайнере таблиц нет возможности выбора такого типа индекса.
...
Рейтинг: 0 / 0
прошу совет об INDEX
    #32716883
MarinaVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир - действительно не туда посмотрела - бывает "тут за день так накувыркаешься" - так что теперь с меня мороженное Спасибо что вовремя ткнули носом
...
Рейтинг: 0 / 0
прошу совет об INDEX
    #32717823
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Alex Sheff
[quote]какого типа поле (integer/numeric/character) лучше
использовать[/quote]
Integer
[quote]в чем разница ындексирования по этим типам полей.[/quote] numeric
хранится как строка из цифр (N(10) займёт 10 байт как в таблице, так и в
индексе) Integer - всего 4 байта (бинарный формат) в то-же время позволяя
иметь 2^32 различных значений (ну обычно отрицательные отбрасывают - значит
остаётся 2^31 а это число с 10-ю знаками). Кроме того учитывай "простоту"
использования Integer - когда все ключевые поля Integer - не стоит вопрос "а
какой-же это был размер у поля NNN - N(4) или N(6) или может оно вообще было
символьным?"
[quote]Для уникальности кода в default value прописываю SYS(3) - это
правильно[/quote]
Конечно нет!
? SYS(3)
? SYS(3)
? SYS(3)
? SYS(3)
- что видим? Повтоярются однако :) Ну разве что у тебя 286/386-й комп :)

SYS(2015) не лучше.

2 Станислав C.

Есть хорошее понятие "суррогатый ключ" - с ним жить проще и веселее чем с
всякими заумными "значащими" ключами. Которые к тому же имеют дурную
тенденцию часто изменяться.

2 Redrik

Да, в рамках ОДНОЙ СЕССИИ SYS(2015) генерирует неповторяющиеся значения -
если вызовы идут слишком часто, то просто наращивается на 1-we значение и
всё (это было введено то-ли в VFP6 то ли даже ещё раньше). ОДНАКО по своей
сути это всё-же неправильный генератор ID. Например запусти на 2-х машинах
свой тест - увидишь повторения. И даже ещё хуже - после перезапуска фокса
(ну т.е. в новой сессии) функция SYS(2015) снова начнёт считать от текущей
даты-времени. А значит если ты в первой сессии нагенерировал скажем 1Млн
ключей SYS(2015) - то велик шанс что быстро запущенная 2-я сессия начнёт
генерировать ключи с "уже пройденных" в первой сессии значений. Если
воспользоваться функциями перобразования SYS(2015) обратно в дату-время, то
можно увидеть, что за твои 2 секунды фокс "уходит вперёд" в SYS(2015) на 15
минут! А значит если ты перезапустишь среду в течении этого периода времени,
то получишь от SYS(2015) уже выделенные ранее значения. Конечно в реальной
работе такого добится трудно - всё-же вставка 1Млн записей займёт времени
поболее 2х секунд, да и реально такие объёмы обычно не добавляются
единовременно, но факт тем не менее остаётся.

Posted via ActualForum NNTP Server 1.0
...
Рейтинг: 0 / 0
прошу совет об INDEX
    #32717923
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor Korolyov
2 Станислав C.

Есть хорошее понятие "суррогатый ключ" - с ним жить проще и веселее чем с
всякими заумными "значащими" ключами. Которые к тому же имеют дурную
тенденцию часто изменяться.


К сожалению, это не от меня зависело :-(. По роду работы пришлось сопровождать и развивать уже действующую на предприятии корпоративную систему (на базе FPD) со всеми ее недостатками...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / прошу совет об INDEX
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]