AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.02.2015, 16:39   #1  
AraraT® is offline
AraraT®
Участник
1C
 
158 / 103 (4) +++++
Регистрация: 13.01.2006
Адрес: Республика Татарстан, г. Казань
Размерность контейнерного поля Аксапты в БД
Коллеги, доброго!

Система - 2012 r3 cu8. СУБД - MSSQL 2014. По сути - виртуалка от Микрософта.

Провел эксперимент. Создал таблицу с 3-мя контенерными полями.
1-е поле без EDT.
2-е поле с EDT - Sha1HashCode
3-е поле с новым EDT типа Container

Смотрим в БД:
FIELD1 (varbinary(max), null)
FIELD2 (varbinary(28), null)
FIELD3 (varbinary(max), null)

В связи с чем возник вопрос: Возможно ли самостоятельно создать EDT типа Container определенного размера? Кто пробовал? Кто что знает по этой теме?
__________________
Айрат Вильданов.
skype: vildanov.a

Последний раз редактировалось AraraT®; 13.02.2015 в 16:43.
Старый 13.02.2015, 21:34   #2  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
762 / 62 (4) ++++
Регистрация: 15.04.2011
а зачем это надо?
Старый 16.02.2015, 09:26   #3  
AraraT® is offline
AraraT®
Участник
1C
 
158 / 103 (4) +++++
Регистрация: 13.01.2006
Адрес: Республика Татарстан, г. Казань
Для тех же кластерных индексов, например.
__________________
Айрат Вильданов.
skype: vildanov.a
Старый 16.02.2015, 11:47   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,523 / 4666 (163) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Насколько я знаю, штатно нельзя средствами Аксапты указать СУБД, что контейнерное поле будет иметь ограниченную длину. Собственно, EDT Sha1HashCode (реализованный, заметьте, в ядре) - это такой своего рода костылик: вроде как поле контейнерное, но в то же время ядро знает, что именно там хранится, и соотв. образом ограничивает длину поля в БД.
В общем случае включать контейнерное поле в кластерный или любой другой индекс - не очень удачная идея. Заметьте, что в стандартном приложении так не делают, вместо этого там используют значение криптографической хеш-функции от значений "ключевых" полей, получая на выходе значение фиксированной длины. Так сделано и в финансовых, и в складских аналитиках (InventDim).
Собственно, контейнерное поле тут понадобилось потому, что SHA-1 возвращает 160-битное значение: 20 байт + их обертка в контейнер дали в итоге 28 байт. В случае использования, к примеру, MD5, которая возвращает 128-битное значение, можно было бы вместо varbinary использовать тип uniqueidentifier, поскольку GUID также имеет длину 128 бит (16 байт): это позволило бы хранить значение хеш-функции без дополнительной контейнерной "обертки". Но в общем и целом чем больше длина результата хеш-функции, тем меньше вероятность коллизий, поэтому, видимо, предпочтение было отдано SHA-1.
За это сообщение автора поблагодарили: AraraT® (4), NetBus (1), dech (3).
Старый 16.02.2015, 11:54   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
2,987 / 1610 (59) ++++++++
Регистрация: 12.10.2004
Интересно, а как быть, если коллизии все же возникнут.
Вероятность этого ненулевая.
Старый 11.04.2018, 12:15   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
2,987 / 1610 (59) ++++++++
Регистрация: 12.10.2004
Цитата:
Сообщение от AraraT® Посмотреть сообщение
Для тех же кластерных индексов, например.
Это антипаттерн в проектировании бд.

https://www.sqlskills.com/blogs/kimb...pace-is-cheap/
https://www.sqlskills.com/blogs/kimb...lustering-key/

В процитированных статьях речь идет о гуидах, но это неважно в данном случае. Важно, что случай с контейнерами аналогичен и будет фрагментация из-за разброса значений криптографических функций.
Старый 11.04.2018, 15:55   #7  
dech is offline
dech
Участник
Аватар для dech
 
454 / 192 (7) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Цитата:
Сообщение от Logger Посмотреть сообщение
Интересно, а как быть, если коллизии все же возникнут.
Вероятность этого ненулевая.
Уникального хэша вы не добьётесь никогда. А если добъётесь, то его можно будет преобразовать обратно, и тогда это будет уже совсем не хэш.
__________________
// no comments
Старый 11.04.2018, 16:19   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
2,987 / 1610 (59) ++++++++
Регистрация: 12.10.2004
Цитата:
Сообщение от dech Посмотреть сообщение
Уникального хэша вы не добьётесь никогда. А если добъётесь...
Разве я где-то сказал что хочу добиться уникального хеша ?
Речь о том что не надо делать кластерным индексом выхлоп newguid() и криптографических функций. Об уникальности речь не шла. Кластерный индекс вообще имеет право быть неуникальным.
Старый 12.04.2018, 09:20   #9  
dech is offline
dech
Участник
Аватар для dech
 
454 / 192 (7) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Разговор шел про коллизии, связанные с хэшем. Вы же сами сказали: что делать, если они возникнут? :-) А коллизий меньше будет, если будет больше хэш.
Я согласен, что неуникальный индекс по хэшу можно сделать, но не по varbinary естественно.
__________________
// no comments

Последний раз редактировалось dech; 12.04.2018 в 09:23.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Хранение шаблонов в БД Hammer DAX: Программирование 0 07.04.2011 13:19
SQL Server - создание таблицы в БД Аксапты Hyper DAX: Программирование 7 06.08.2010 19:40
Вставка строк в таблицы Аксапты сторонними средствами Андре DAX: База знаний и проекты 1 07.05.2009 16:49
Матрица совместимости версий Аксапты и версий БД azhukov DAX: Администрирование 1 20.10.2005 15:06
Получить значение поля таблицы по номеру (Id) поля Anais DAX: Программирование 2 15.04.2004 13:00
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:59.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.