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

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

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

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

ЗЫ. А тутошний форум по SyBase не помощник?
...
Рейтинг: 0 / 0
22.08.2003, 13:28
    #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
25.08.2003, 12:33
    #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
25.08.2003, 12:43
    #32246070
Aijik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой тип данных лучше всего для ключей?
Владимир, почему тогда вышеприведенный тест работает без проблем (VFP7SP1 - VFP8)? И вообще как проявляется баг? ФоксКлуб, к сожалению, не досупен - знаю, что в Ваша статья по этому поводу там есть, но не помню, в чем конкретно там проблема была, а посмотреть ироды (буржуи) не дают :)
...
Рейтинг: 0 / 0
25.08.2003, 13:15
    #32246116
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой тип данных лучше всего для ключей?
Суть бага заключается в том, что выбранное текущее значение НЕ ОТОБРАЖАЕТСЯ. Т.е. значения Value абсолютно правильные, но вот вместо DisplayValue отображается пустая строка.

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


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