Уникальные поля

Пишите ваши предложения здесь.
Аватара пользователя
nikorn
Сообщения: 342
Зарегистрирован: 02 апр 2016, 22:26
Имя: Корняков Никита
Откуда: РФ, Ярославль
Организация: Тяжмаштрейд
Контактная информация:

Уникальные поля

Сообщение nikorn »

Для некоторых полей требуется обеспечить уникальность значения (например, артикул товара, номер договора).

Кажется, сейчас такой возможности нет? Если руками в базе сделать поле уникальным, будет работать?
Аватара пользователя
support
Техническая поддержка
Сообщения: 9068
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Уникальные поля

Сообщение support »

Да, уже было предложение по этому поводу, по этому добавил в план, но это уже для 1.8
Если руками в базе сделать поле уникальным, будет работать?
Нет, будет просто ошибка при добавлении...

Нужно перед добавление посылать дополнительный запрос на проверку...
Аватара пользователя
nikorn
Сообщения: 342
Зарегистрирован: 02 апр 2016, 22:26
Имя: Корняков Никита
Откуда: РФ, Ярославль
Организация: Тяжмаштрейд
Контактная информация:

Re: Уникальные поля

Сообщение nikorn »

Ошибка будет только в случае совпадающих значений? Или всегда?

Если только в случае совпадения, то пускай. Напишем в инструкции, что эта ошибка возникает при неуникальности значений
Аватара пользователя
support
Техническая поддержка
Сообщения: 9068
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Уникальные поля

Сообщение support »

Ошибка будет только в случае совпадающих значений? Или всегда?
только в случае совпадающих значений
Аватара пользователя
nikorn
Сообщения: 342
Зарегистрирован: 02 апр 2016, 22:26
Имя: Корняков Никита
Откуда: РФ, Ярославль
Организация: Тяжмаштрейд
Контактная информация:

Re: Уникальные поля

Сообщение nikorn »

Увы, просто сделать не получается. Все пользовательские поля имеют текстовый тип, а текстовые поля в InnoDB нельзя сделать уникальными. :(

Чтобы сделать поле уникальным, придется еще и поменять его тип, хотя бы на строковый. Но пока не хочется настолько сильно менять структуру базы. Хотя сегодня уже нашел в базе два товара с одинаковыми наименованиями...
Аватара пользователя
support
Техническая поддержка
Сообщения: 9068
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Уникальные поля

Сообщение support »

По версии 1.7 уже почти все готово, осталось несколько мелочей, по этому планирую включить данную функцию в 1.7.

Но мне нужен совет в данном вопросе.

Изначально я подумал сделать отдельное поле для уникального значения, но потом подумал что уникальным может быть и дата и текст и число или другие типы полей, по этому может стоит добавить отдельную настройку "Уникальное поле" для определенных типов полей, но тогда каких?

Если у вас есть свои варианты, предлагайте.
Аватара пользователя
nikorn
Сообщения: 342
Зарегистрирован: 02 апр 2016, 22:26
Имя: Корняков Никита
Откуда: РФ, Ярославль
Организация: Тяжмаштрейд
Контактная информация:

Re: Уникальные поля

Сообщение nikorn »

К сожалению, уникальным действительно может быть любое поле в зависимости от требования информационной системы (кроме текстового поля типа "Примечания").

Но если исходить из практических потребностей, то требуется, как минимум, уникальный идентификатор записи (например, артикул товара, номер договора), который позволит избежать дублирования записей. Как правило, это все-таки текстовое поле, и, в простейшем случае, достаточно одного такого уникального поля.

*) В базе данных есть уникальный идентификатор - поле ID, но оно не доступно пользователю и неудобно для использования.
Аватара пользователя
alcompstudio
Спонсор
Спонсор
Сообщения: 1710
Зарегистрирован: 03 янв 2016, 20:42
Имя: Александр Афанасьев
Откуда: г. Славянск, Донецкая обл.
Организация: Alcomp

Re: Уникальные поля

Сообщение alcompstudio »

Добрый день!

Позвольте выразить мысль от имени обычного пользователя (не программиста) по поводу уникальных полей. Если я правильно понял, то уникальное поле должно быть для отдельной сущности (таблицы данных), а не для всей базы со всеми сущностями, т.е. Значения уникальных полей для сущности Проекты не должны иметь дубли, но могут совпадать со значениями сущности Задачи (грубый пример). Аналогично и для сущности Задачи.

В моей практике уникальное поле встречалось только в виде артикулов (идентификаторов) для товаров, которые заполнялись во многих случаях вручную (если база данных автоматически не формировала уникальный ID). При этом сам артикул может состоять либо из только числовых значений, либо "буквенных" или тех и иных. Т.е. по сути уникальным логично делать только короткие текстовые поля (поле ввода в нашем случае) и числовое поле. Для всех остальных типов я пока не вижу смысла добавлять уникальность, потому как они в той или иной степени могут иметь предустановленные значения, которые по своей сути уже должны повторяться в записях или просто для них нецелесообразно делать уникальность.
В предыдущем посте ув. nikorn в принципе так и отметил - уникальность сделать для "поля ввода" (и возможно числового), этого думаю достаточно на первом этапе для уникализации записей и исключения дублирования.

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

Тут возникает еще момент с импортом записей. Тогда тут можно сделать настройку для импорта по указанному выше принципу (1- проигнорировать и добавить, 2- не добавлять, 3 - заменить - как бы обновить значения).

Если что-то не по теме написал или неясно выразил мысль - прошу прощения :) .
Аватара пользователя
nikorn
Сообщения: 342
Зарегистрирован: 02 апр 2016, 22:26
Имя: Корняков Никита
Откуда: РФ, Ярославль
Организация: Тяжмаштрейд
Контактная информация:

Re: Уникальные поля

Сообщение nikorn »

alcompstudio, Вы все правильно описали.

1) Обычно требуется обеспечить уникальность значений полей в пределах одной таблицы. Это то, о чем мы вели речь выше. Как правило, уникальность в пределах таблицы проверяется на уровне СУБД, но особенность системы "Руководитель" такова, что все поля по умолчанию являются многострочными текстовыми полями, для которых задать уникальность на уровне БД не возможно. Тем не менее, разработчик, видимо, нашел какое-то решение.

2) Если требуется обеспечить уникальность в пределах всей системы, а не только одной таблицы, то лучше всего использовать глобальные списки, в которых будет обеспечена требуемая уникальность значений (например, глобальный список товаров/артикулов). Глобальные списки в системе "Руководитель" появятся с версии 1.7
Аватара пользователя
support
Техническая поддержка
Сообщения: 9068
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Уникальные поля

Сообщение support »

Готово.

В 1.7 опция "Уникальное поле" добавлена для типов поле "Поле ввода" и "Числовое поле"

Если данная опция установлена, то после ввода значения в поле, выполняется проверка на уникальность (событие focusout)

Если введенное значение не уникально то появляется ошибка "Значение поля должно быть уникально"
Вложения
unique_field_example.png
Ответить