powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Какой тип данных лучше всего для ключей?
19 сообщений из 19, страница 1 из 1
Какой тип данных лучше всего для ключей?
    #32207912
_guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток всем!
Кто-нибудь проводил анализ по поводу того, какой тип данных лучше всего использовать для ключевых полей таблиц? То бишь по каким ключам выборки производятся быстрее и т.д.
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32208132
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По ключевым полям, как правило, есть индекс. В этом случае абсолютно все-равно какой тип данных используется. Время поиска будет сопоставимо при любом типе данных.

Так что с точки зрения быстродействия - это дело исключительно личных предпочтений программиста.
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32244032
Фотография MaestroEv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Символьный, потому, что чем меньше поле тем лучше!
Все буквы во всех регистрах и все цифры и всякие там значки...
То есть все что можно увидеть, ввести и напечатать. (на всякий случай)
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32244070
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и я за символьный! Потому что грабли от VFP30 до шестерки с тем же комбо, в кот результат хочеца получить как ИД, а если он цифрой, то начинаеца беда с возвратом индекса комбы, а не значения ИД'а таблицы... Кстати эта фича до 8 тоже дожила?
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32244121
Aijik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то начинаеца беда с возвратом индекса комбы, а не значения ИД'а таблицы... Кстати эта фича до 8 тоже дожила?

Не юзаю комбы в гридах, но вроде как Гринчишин утверждал, что баг исправили. Лабай тестовый пример, выкидывай сюда - прогоню...
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32244158
chagoserg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да всё таже фигня с комбами ...
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32244180
Равиль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ключ нужен только для уникального ID, думаю символьный лучше, т.к. компактнее и функции типа Sys(2015) возвращают символьные значения.
В тех же случаях, когда нужна сортировка по нему, я выбираю тип по контексту :)
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32244218
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Aijik
эта беда не гридах, а комбах вцелом.. примера нету, потому что фс:е на символьных ключах заточено, а лабать так просто... chagoserg уже крикнул, что осталась ;(
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32244362
Gustaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините, а поподробней о сути проблемы можно (не очень понимаю), какие проблемы вылазят при использоании комбо и отражении в нём таблицы с numeric ID (и индексу по нём)? .. просто не сталкивался с таким раньше.
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32244384
chagoserg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не знаю, как кто, а я эту проблему вижу так:
таблица - два поля
одно - смысловое значение, второе -идентификатор(нумерик)
у комбо источник - поля этой таблы table.field1,field2
BoundColumn2
BoundTo=.t.
выбираем значение из комбо
тип value комбо - char

2 Gustaf
а можно с Вами по проблемам использования Sybase пообщаться?
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32244544
Gustaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 chagoserg
Это ты в профиле увидел? :) Мои познания в SyBase ограничены версией 5.0 (AnyWhere) и почерпнуты лишь из самого мануала, поставляемого с самим продуктом. Простяцкий SQL сервер, клиентская, серверная часть, легко ставится, легко настраивается, в хелпе я нашёл ответы на все интересующие меня вопросы. Чем могу - помогу.

ЗЫ. А тутошний форум по SyBase не помощник?
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32244573
Aijik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Hel!Riser

Хэл! Вот слабал небольшой тест. Все работает правильно. В зареманых строках то же самое для символьных iD. Работает точно так же... Как именно увидеть баг?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
CREATE CURSOR TChild (Weather C( 15 ), WiD I)
INSERT INTO TChild (Weather,WiD) VALUES ( "Жарко" , 10 )
INSERT INTO TChild (Weather,WiD) VALUES ( "Холодно" , 20 )


CREATE CURSOR TParent (Day C( 15 ), WiD I)
INSERT INTO TParent (Day,WiD) VALUES ( "Понедельник" , 20 )
INSERT INTO TParent (Day,WiD) VALUES ( "Вторник" , 10 )
INSERT INTO TParent (Day,WiD) VALUES ( "Среда" , 20 )
INSERT INTO TParent (Day,WiD) VALUES ( "Четверг" , 10 )


*!*    CREATE CURSOR TChild (Weather C( 15 ), WiD C( 2 ))
*!*    INSERT INTO TChild (Weather,WiD) VALUES ( "Жарко" , "10 ")
*!*    INSERT INTO TChild (Weather,WiD) VALUES ( "Холодно" , "20 ")


*!*    CREATE CURSOR TParent (Day C( 15 ), WiD C( 2 ))
*!*    INSERT INTO TParent (Day,WiD) VALUES ( "Понедельник" , "20 ")
*!*    INSERT INTO TParent (Day,WiD) VALUES ( "Вторник" , "10 ")
*!*    INSERT INTO TParent (Day,WiD) VALUES ( "Среда" , "20 ")
*!*    INSERT INTO TParent (Day,WiD) VALUES ( "Четверг" , "10 ")


oForm=CREATEOBJECT( "comboform" )
oForm.Show( 1 )


DEFINE CLASS comboform AS form

    AutoCenter = .T.

    ADD OBJECT combo1 AS combobox WITH ;
        BoundColumn =  2 , ;
        RowSourceType =  6 , ;
        RowSource =  "TChild.Weather, WiD" , ;
        ControlSource =  "TParent.WiD" , ;
        Height =  24 , ;
        Left =  24 , ;
        Style =  2 , ;
        Top =  40 , ;
        Width =  100 , ;
        BoundTo = .T., ;
        Name =  "Combo1" 


    ADD OBJECT command1 AS commandbutton WITH ;
        Top =  100 , ;
        Left =  20 , ;
        Height =  27 , ;
        Width =  84 , ;
        Caption =  "ComboValue" , ;
        Name =  "Command1" 


    ADD OBJECT list1 AS listbox WITH ;
        RowSourceType =  6 , ;
        RowSource =  "TParent.Day" , ;
        Height =  197 , ;
        Left =  168 , ;
        Top =  32 , ;
        Width =  169 , ;
        Name =  "List1" 



    PROCEDURE combo1.InteractiveChange
        ACTI SCRE
        ?VARTYPE(This.Value)
        ?This.Value
    ENDPROC


    PROCEDURE command1.Click
        ACTIVATE SCREEN
        ?VARTYPE(ThisForm.Combo1.Value)
        ?ThisForm.Combo1.Value
                 
    ENDPROC


    PROCEDURE list1.InteractiveChange
        ThisForm.Combo1.Refresh()
    ENDPROC



ENDDEFINE
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32246060
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема с Combo возникает если:

1) В качестве источника данных выступают напрямую поля таблицы (RowSourceType = 6)
2) Ключевое поле имеет числовой тип

Соответсвенно, решением проблемы является замена источника данных (я использую массивы) или изменение типа (что проблематично)

===========================================================
Насчет длины ключа.

Как правило, в качестве ключевого поля используются поля типа Integer. Т.е. физически они занимают 4 байта на каждую запись. При этом, опять же как правило, используются только положительные значения, т.е. диапазон значений ключа от 0 до 2 147 483 647.

Много это или мало?

Опять же, как правило, срок жизни программы не превышает 2...3 лет. Данные живут несколько больше, примерно 10...15 лет. Предположим, что данные у нас "вечные" и живут 100 лет.

Это значит, что для того, чтобы достичь предела насыщения типа Integer пользователи должны в течении 100 лет ежедневно без перерыва на праздники и выходные вколачивать в базу данных примерно по 60 тысяч записей.

Согласен, бывают и такие задачи. НО!!! Для подобных задач DBF-таблицы становятся уже неприемлимыми, поскольку они просто физически не могут вместить такое количество записей. Предел DBF-таблиц - это 1 миллиард записей, т.е. примерно половина диапазона типа Integer.

Если вернуться к типу Character, то исходя из предположения, что длина ключа не должна превышать тип Integer, мы должны установить длину C(4). Предположим, что в качестве значения могут использоваться все 254 символа кодовой страницы. Это значит, что предельно возможное количество значений такого ключа составит:

254**4= 4,162,314,256

Т.е. всего в 2 раза больше чем для типа Integer. Если же вспомнить, что ряд символов использовать неудобно по разным причинам, то остается около 100 допустимых символов для использования в качестве ключа. Т.е. возвращаемся примерно к тому же диапазону значений, что и для типа Integer.

Итого, с точки зрения длины ключа тип Character не дает никаких преимуществ при использовании в DBF-таблицах по сравнению с типом Integer.

Подчеркну еще раз, в данном случае я рассмотрел только аспект физической длины ключа. Однако есть задачи, когда использование в качестве ключевого поля типа Character становится предпочтительнее. Но это связано уже не с какими-то техническими проблемами, а исключительно с логикой реализации задачи.

Если же вспомнить, что в MS SQL и в VFP8 существует такое понятие как автоинкрементные поля, которые просто не могут не быть числовыми. То вопрос о типе ключевого поля вообще становится чисто теоретическим. И опять же переходит из области чисто практической в область личных предпочтений программиста.
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32246070
Aijik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир, почему тогда вышеприведенный тест работает без проблем (VFP7SP1 - VFP8)? И вообще как проявляется баг? ФоксКлуб, к сожалению, не досупен - знаю, что в Ваша статья по этому поводу там есть, но не помню, в чем конкретно там проблема была, а посмотреть ироды (буржуи) не дают :)
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32246116
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть бага заключается в том, что выбранное текущее значение НЕ ОТОБРАЖАЕТСЯ. Т.е. значения Value абсолютно правильные, но вот вместо DisplayValue отображается пустая строка.

Как правило, этот баг проявляется при использовании ComboBox внутри Grid. Причем при потере фокуса в текущей ячейке правильное отображение восстанавливается. Проблема именно в той ячейке, где в данный момент находися фокус.
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32247208
Aijik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, действительно, этот баг остался и в VFP8 :(
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32247281
P.Ol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, действительно, этот баг остался и в VFP8 :(
Я с ним тока на VFP8 и столкнулся :(
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32247410
Любопытный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так нельзя: юзать не .value, а напрямую обращаться к значению поля? кажись, указатель тоже перемещается при играх с комбо?
...
Рейтинг: 0 / 0
Какой тип данных лучше всего для ключей?
    #32247425
chagoserg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Любопытный
так дело в том, как сказано выше - проявление бага только в отображении комбо в гриде, и не важно что использовать...
причём баг проявляется в случае, если источником комбо является поля или алиас (даже если id конвертирован в char)
если используется массив или select с конвертированием - всё нормально
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Какой тип данных лучше всего для ключей?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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