Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 свой collation?  [new]
вводятчохотят!
Guest
Есть наверное классическая проблема - юзеры вводят наименования в базы данных (кои потом совмещаются), постоянно путая русские буквы с латинскими, доходит до смешного - в текстовом поле половина букв русские, половина латинские, некоторые даже умудряются заменять буквы цифрами - в общем, полный 1337 5p3АI< :) Естественно, потом у других юзеров возникают проблемы с поиском того, что навводили первые. Вариантов "что с этим делать" я придумал два, и оба какие-то кривые:
1. создать свой collation чисто для этого поля - но тут вопрос, позволяет ли вообще mssql создавать такое?
2. вычисляемое поле, в котором заранее сделаны все возможные замены. Для своего софта это было бы приемлимо, а вот для стороннего - запросы на поиск не изменишь, увы.
Есть ли ещё варианты, как это решить?
13 фев 13, 10:32    [13918462]     Ответить | Цитировать Сообщить модератору
 Re: свой collation?  [new]
Glory
Member

Откуда:
Сообщений: 104760
вводятчохотят!
Вариантов "что с этим делать" я придумал два, и оба какие-то кривые:

Сделать CHECK constrаint на поле и предотвратить занесение неправильных данных.

Сообщение было отредактировано: 13 фев 13, 10:35
13 фев 13, 10:35    [13918479]     Ответить | Цитировать Сообщить модератору
 Re: свой collation?  [new]
вводятчохотят!
Guest
Glory,
так данные-то все правильные! Возможны и русские символы, и латинские, нельзя это описать простым констрейнтом. Те же номенклатуры электронных компонентов например - наши обозначаются кириллицей, импортные латиницей. Но ведь можно набрать кириллическое обозначение и латинскими символами, если постараться.
13 фев 13, 10:41    [13918514]     Ответить | Цитировать Сообщить модератору
 Re: свой collation?  [new]
Glory
Member

Откуда:
Сообщений: 104760
вводятчохотят!
Glory,
так данные-то все правильные!

Если данные правильные, почему тогда "Естественно, потом у других юзеров возникают проблемы с поиском того, что навводили первые." ?
Если кто-то не может найти _правильные_ данные, то наверное этот кто-то задает неправильные критерии поиска
13 фев 13, 10:48    [13918546]     Ответить | Цитировать Сообщить модератору
 Re: свой collation?  [new]
вводятчохотят!
Guest
Glory,
я немного неправильно выразился. Они неправильные, но в общем виде правилами не описываются.
Вот например возьмём да и введём в гугл слово "микросхема", в автозаполнении сразу будут варианты "к155ла3" и "tda2030a". (я просто не силён в номенклатуре этой электронной). Как видно, в первом случае можно вместо кириллической К использовать латинскую, а во втором - вместо латинской А нашу. Констрейнтом это не отловишь.
13 фев 13, 10:55    [13918581]     Ответить | Цитировать Сообщить модератору
 Re: свой collation?  [new]
Glory
Member

Откуда:
Сообщений: 104760
вводятчохотят!
Они неправильные, но в общем виде правилами не описываются.

Ну так опишите их.
И заставьте следовать им.
вводятчохотят!
Как видно, в первом случае можно вместо кириллической К использовать латинскую, а во втором - вместо латинской А нашу.

Откуда это "видно" ?
Любая номенклатура стандартизирована. В ней не может быть то, что вы описываете
А гугл просто хранит историю того, что вводили пользователи.
13 фев 13, 10:59    [13918612]     Ответить | Цитировать Сообщить модератору
 Re: свой collation?  [new]
вводятчохотят!
Guest
Ну так опишите их.
И заставьте следовать им.

Административный путь тут сложен, ибо не все в этой цепочке подчиняются единому начальству. Но вообще он тут идеален, да.

Откуда это "видно" ?

Из шрифтов, вот две буковки: К и K :)

Любая номенклатура стандартизирована. В ней не может быть то, что вы описываете

В том-то и проблема, что они эту номенклатуру и вводят. А другие потом её ищут.
13 фев 13, 11:07    [13918667]     Ответить | Цитировать Сообщить модератору
 Re: свой collation?  [new]
Glory
Member

Откуда:
Сообщений: 104760
вводятчохотят!
Административный путь тут сложен,

Это называется проектирование, а не администрирование

вводятчохотят!
В том-то и проблема, что они эту номенклатуру и вводят. А другие потом её ищут.

И что мешает программно запретить ввод неправильных данных ?

вводятчохотят!
Из шрифтов, вот две буковки: К и K :)

Откуда видно, что номенклатура "к155ла3" _разрешает_ использование к и k ?
13 фев 13, 11:12    [13918693]     Ответить | Цитировать Сообщить модератору
 Re: свой collation?  [new]
вводятчохотят!
Guest
Откуда видно, что номенклатура "к155ла3" _разрешает_ использование к и k ?

Кроме микросхем, в той же таблице в тех же полях лежат: резисторы, картриджи для принтера, тяжелые металлы, винты с болтами, тракторы "беларусь" и прочее. Матценности. Как правильно описать номенклатуру всего этого в констрейнте?
13 фев 13, 11:15    [13918715]     Ответить | Цитировать Сообщить модератору
 Re: свой collation?  [new]
Glory
Member

Откуда:
Сообщений: 104760
вводятчохотят!
Кроме микросхем, в той же таблице в тех же полях лежат: резисторы, картриджи для принтера, тяжелые металлы, винты с болтами, тракторы "беларусь" и прочее. Матценности.

И поэтому мы блин сделаем одного текстовое блоб поле.
И пускай пользователи фигарят туда все, что пожелают.
А мы потом напишем супер-пупер умный робот, который будет весь этот навоз разгребать.

вводятчохотят!
Как правильно описать номенклатуру всего этого в констрейнте?

Как правильно проектировать схему данных ???
Сначала учатся - теория баз данных там, основы проектирования.
Потом собирают требования заказчика, формализуются, определюятся стандарты
Потом пишется ТЗ.
Потом программист создает код.
13 фев 13, 11:22    [13918775]     Ответить | Цитировать Сообщить модератору
 Re: свой collation?  [new]
вводятчохотят!
Guest
И поэтому мы блин сделаем одного текстовое блоб поле.
И пускай пользователи фигарят туда все, что пожелают.
А мы потом напишем супер-пупер умный робот, который будет весь этот навоз разгребать.

Безотносительно того, что эта программень и эта база не нами написана - а во всяких складских и прочих учётных системах для каждого типа ценностей свои таблицы и свои правила наименования? Нет, я правда не видел :) В том, что вижу - таблица одна.

Как правильно проектировать схему данных ???
Сначала учатся - теория баз данных там, основы проектирования.
Потом собирают требования заказчика, формализуются, определюятся стандарты
Потом пишется ТЗ.
Потом программист создает код.

Да на этой чудо-базе даже первичных ключей нету. Однако, работаем с чем приходится.
13 фев 13, 11:28    [13918812]     Ответить | Цитировать Сообщить модератору
 Re: свой collation?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
вводятчохотят!
2. вычисляемое поле, в котором заранее сделаны все возможные замены. Для своего софта это было бы приемлимо, а вот для стороннего - запросы на поиск не изменишь, увы.

А какими запросами сторонний софт ищет эти данные?
13 фев 13, 11:56    [13919046]     Ответить | Цитировать Сообщить модератору
 Re: свой collation?  [new]
вводятчохотят!
Guest
А какими запросами сторонний софт ищет эти данные?

В основном, фильтруются запросами типа LIKE 'Подстрока%'.
Самая распространённая проблема - сидит дама, вбивает фильтр по подстроке типа 'Изделие Х4390' и смотрит, что ей вывалилось. Если нужная ей номенклатурная единица не появилась, то она создаёт новую, соотвественно, получаем в итоге дублирование. Вот это главное, чего хочется избежать, для этого и хочется вычисляемое персистед поле со всеми возможными автозаменами в одну сторону, например все лат. символы заменены на похожие русские + своя говноформочка поиска, которая искала бы по нему и возвращала например номенклатурный код.
13 фев 13, 12:10    [13919195]     Ответить | Цитировать Сообщить модератору
 Re: свой collation?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33989
Блог
вводятчохотят!
Если нужная ей номенклатурная единица не появилась, то она создаёт новую, соотвественно, получаем в итоге дублирование. Вот это главное, чего хочется избежать, для этого.


Нужно комбинировать:
  • наличие единой базы административно-справочной информации, где будет точка ввода справочников
  • административные методы (+ наличие инструкций)
  • нечеткий поиск: при попытке добавления новой номенклатуры должен выводится список похожих
  • 13 фев 13, 12:17    [13919254]     Ответить | Цитировать Сообщить модератору
     Re: свой collation?  [new]
    .
    Guest
    а может сделать парсер, который сперва выделит слова (определитесь с разделителями,
    все что между пускай будут "слова"), а потом каждое слово должно выдержать проверку:
    целиком кириллическое/полностью латиницей ?
    как только натыкается на "неправильное" слово, отвергнуть/вывести сообщение "недопустимый символ в <слово>".
    13 фев 13, 12:42    [13919566]     Ответить | Цитировать Сообщить модератору
     Re: свой collation?  [new]
    Гость333
    Member

    Откуда:
    Сообщений: 3683
    .
    каждое слово должно выдержать проверку:
    целиком кириллическое/полностью латиницей ?

    Идея хорошая, но это вряд ли поможет для случая "Микросхема к155" / "Микросхема k155".
    13 фев 13, 12:46    [13919609]     Ответить | Цитировать Сообщить модератору
     Re: свой collation?  [new]
    вводятчохотят!
    Guest
    Нужно комбинировать:
    наличие единой базы административно-справочной информации, где будет точка ввода справочников
    административные методы (+ наличие инструкций)
    нечеткий поиск: при попытке добавления новой номенклатуры должен выводится список похожих


    вот это пока и планирую - свой поиск, а за введение дублирующихся данных - карать :) Надо только кары эти протолкнуть

    а может сделать парсер, который сперва выделит слова (определитесь с разделителями,
    все что между пускай будут "слова"), а потом каждое слово должно выдержать проверку:
    целиком кириллическое/полностью латиницей ?
    как только натыкается на "неправильное" слово, отвергнуть/вывести сообщение "недопустимый символ в <слово>".


    Для своего софта это было бы вполне решение, для чужого Raiseerror скорее всего пойдёт в unhandled exception :)

    Так а насчёт коллейшена-то всё-таки - нельзя свой создавать?
    13 фев 13, 12:46    [13919610]     Ответить | Цитировать Сообщить модератору
     Re: свой collation?  [new]
    Владимир Затуливетер
    Member

    Откуда:
    Сообщений: 427
    Критик
    Нужно комбинировать:
  • наличие единой базы административно-справочной информации, где будет точка ввода справочников
  • административные методы (+ наличие инструкций)
  • нечеткий поиск: при попытке добавления новой номенклатуры должен выводится список похожих


  • Добавлю к сказаному
    При добавлении данных попробуйте все введеное конвертить к латинице и писать в отдельное поле (или вычисляемый столбец). Потом когда пользователь ищет данные вы его ввод тоже конвертите к латинице и на основе нечеткого поиска выдаете совпадения, ну или like на крайний случай.
    Нечеткий поиск: http://ru.wikipedia.org/wiki/Расстояние_Левенштейна
    13 фев 13, 14:27    [13920538]     Ответить | Цитировать Сообщить модератору
     Re: свой collation?  [new]
    Гость333
    Member

    Откуда:
    Сообщений: 3683
    Владимир Затуливетер
    когда пользователь ищет данные вы его ввод тоже конвертите к латинице и на основе нечеткого поиска выдаете совпадения, ну или like на крайний случай

    А как быть с идущими со стороннего ПО запросами "WHERE Field LIKE 'Подстрока%' "?
    13 фев 13, 14:44    [13920691]     Ответить | Цитировать Сообщить модератору
     Re: свой collation?  [new]
    ambarka_max
    Member

    Откуда: Россия
    Сообщений: 517
    Удалить это поле :) Пускай переписывают ПО.
    13 фев 13, 14:46    [13920716]     Ответить | Цитировать Сообщить модератору
     Re: свой collation?  [new]
    ambarka_max
    Member

    Откуда: Россия
    Сообщений: 517
    Вообще, вот оно (вот она рыба моей мечты)... доказательство того что нельзя "стороннему ПО" давать доступ к структуре БД. Только процедуры. Только хардкор. Таблицы все закрыть просто железно.
    13 фев 13, 14:51    [13920782]     Ответить | Цитировать Сообщить модератору
     Re: свой collation?  [new]
    ambarka_max
    Member

    Откуда: Россия
    Сообщений: 517
    Гость333
    Владимир Затуливетер
    когда пользователь ищет данные вы его ввод тоже конвертите к латинице и на основе нечеткого поиска выдаете совпадения, ну или like на крайний случай

    А как быть с идущими со стороннего ПО запросами "WHERE Field LIKE 'Подстрока%' "?

    Возможно поможет просто исправление данных при вставке, триггер на инсерте правит значение поля как можно ближе приближаясь к корректонму значению (вызывает какуюнибудь анализирующую и исправляющую функцию) и записывает его в поле Field.
    13 фев 13, 14:57    [13920838]     Ответить | Цитировать Сообщить модератору
     Re: свой collation?  [new]
    Crimean
    Member

    Откуда:
    Сообщений: 13148
    Гость333
    .
    каждое слово должно выдержать проверку:
    целиком кириллическое/полностью латиницей ?

    Идея хорошая, но это вряд ли поможет для случая "Микросхема к155" / "Микросхема k155".


    так "каждое отдельно взятое слово" же. нормальный подход. очень даже работающий.
    13 фев 13, 14:57    [13920840]     Ответить | Цитировать Сообщить модератору
     Re: свой collation?  [new]
    Гость333
    Member

    Откуда:
    Сообщений: 3683
    Crimean
    Гость333
    пропущено...

    Идея хорошая, но это вряд ли поможет для случая "Микросхема к155" / "Микросхема k155".


    так "каждое отдельно взятое слово" же. нормальный подход. очень даже работающий.

    Это я к тому, что такой подход не защитит от появления дублей вида "Микросхема к155" и "Микросхема k155", т.к. каждая из этих строк проходит описанную проверку.
    13 фев 13, 15:00    [13920864]     Ответить | Цитировать Сообщить модератору
     Re: свой collation?  [new]
    ambarka_max
    Member

    Откуда: Россия
    Сообщений: 517
    Если заведение новой номенклатуры происходит в стороннем ПО (которое невозможно изменить), то тут мало что можно сделать. Только жестоко рэйзить эррор, который неизвестно куда вывалиться и вывалиться ли вообще. Красиво не получиться.
    13 фев 13, 15:03    [13920889]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить