Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизОтловить одинаковые данные в БД Найти похожие ветки
← →
nik7777 (2004-03-26 06:39) [0]Приветствую всех Мастеров!!!
Help me!!!
Может я последний ламер или просто голову заклинило, в общем суть вопроса в следующем:
Есть Interbase(FireBird 1.0) и клиент для работы с ним написанный а Delphi. В дельфевой проге работа идет по транзакциям, каждый пользователь работает отдельно.
Например, таблица клиентов, куда вводятся фио, адрес и еще несколько реквизитов.
По идее до завершения транзакции я не увижу данных введенных соседом, а потому не смогу проверить, что такие данные в базе уже есть.
Подскажите механизм отлавливания одинаковых данных для таблиц, буду очень благодарен.
Если что дайте ссылку.
← →
ЮЮ © (2004-03-26 06:42) [1]Неужели один и тот же клиент может оказаться около двух компьютеров одновременно? :-)
← →
Deniz © (2004-03-26 06:49) [2]Уникальный индекс + отлов Exception
← →
Fay © (2004-03-26 06:50) [3]И по какомим же полям индекс Вы предлагаете создать?
← →
Fay © (2004-03-26 06:51) [4]Имелось ввиду "по каким" 8)
← →
Deniz © (2004-03-26 07:11) [5]Так и вопрос точно не указывает по каким критериям определяется, что "такие данные в базе уже есть". Вот если бы автор указал критерий(например таб.№ или №страхового полиса или еще что) тогда можно было бы конкретнее ответить, а так однофамильцев по ФИО тоже может быть в теории.
← →
Anatoly Podgoretsky © (2004-03-26 09:06) [6]А по вопросу только по всем, иначе это разные записию
← →
Alex_Bredin © (2004-03-26 09:11) [7]
> nik7777 (26.03.04 06:39)
возьмите за правило заводить в каждой таблице поле ID
← →
Sergey13 © (2004-03-26 09:39) [8]ИМХО, вопрос был несколько про иное (автор исчез и подтвердить/опровегнуть некому 8-). Это проблема смысловых записей-двойников. Типа "Фирма Рога и копыта" и "ООО Рога и копыта". Програмно она не решается, или вернее решается не до конца и не окончательно. При этом сама работа очень сложная и ресурсоемкая.
Самое правильное - обязать кого либо из персонала следить за этим и предоставить ему инструментарий для исправления возникших коллизий. При этом можно попробовать примитивно искать "похожие" записи при вставке и выдавать предупреждения оператору. Ну и конечно постараться выделить реквизиты, на которые можно однозначно навесить уникальность, типа ИНН.
← →
nik7777 (2004-03-26 11:56) [9]Даже если будут уникальные индексы, как мне определить при незавершенной транзакции что запись уже существует...
например есть индекс по номеру паспорта, дате рождения и вводятся одновременно одинаковые данные, как быть в таком случае???
← →
nik7777 (2004-03-26 11:59) [10]TO Alex_Bredin:
Что ты этим хотел сказать,ID поля есть в каждой таблице (каждая запись с уникальным номером)...
← →
Соловьев © (2004-03-26 12:06) [11]2 nik7777 (26.03.04 11:56)
никак пока не зокомитишь :)
или перед сохранением делай запрос к БД и исчи двойника... Правда нет гарантии, что пока ты сделаешь этот запрос кто-то не закомитит такую же запись.. Один выход - лови при комите ексепшн и все. Давай инфу пользователю - пусть он решает что делать.
← →
Sergey13 © (2004-03-26 12:55) [12]2nik7777 (26.03.04 11:56) [9]
Да все просто. Если уникальный индекс есть, фиг ты закомитишь чего несоответствующего. Реакция программы на "фиг" зависит от тебя. 8-)
← →
nik7777 (2004-03-27 05:51) [13]TO Sergey13:
Попробовал создать уникальные индексы - работает.
Спасибо!
Так же благодарю всех Мастеров, которые чем-то помогли мне.
← →
Desdechado © (2004-03-27 15:12) [14]а мне вообще непонятно, как могут с 2 компов одну информацию вводить ...
Если это заказ, или поставка со склада, или чел на прием к врачу пришел - он же ОДИН раз регистрируется. Как несколько копий получается бумажных?!
← →
Andery (2004-03-29 08:46) [15]Возможно прийдется писать триггер на вставку и проверять уникальность строк с созданием исключительной ситуации с объяснением причины.
← →
Sergey13 © (2004-03-29 08:49) [16]2Andery (29.03.04 08:46) [15]
А зачем такие сложности, если исключение и так сгенерится при нарушении уникальности?
← →
stud © (2004-03-29 09:31) [17]
> Desdechado © (27.03.04 15:12) [14]
ее даже с одного могут занести. и уникальные индексы оказываются бессильны)))
← →
Anatoly Podgoretsky © (2004-03-29 09:39) [18]Это как? Ты что то не то говоришь, как это бессильны, может вам стоит программиста пригласить?
← →
stud © (2004-03-29 09:50) [19]
> Anatoly Podgoretsky © (29.03.04 09:39) [18]
пример такой: в медицине идентификация пациента происходит по четырем полям - ф.и.о.дата рождения. достаточно для одного и того же пациента дату рождения ставить с потолка - и это уже другой человек плюс ошибки в фио при вводе)))
← →
Anatoly Podgoretsky © (2004-03-29 09:52) [20]Точно программист нужен.
← →
Sergey13 © (2004-03-29 09:58) [21]2stud © (29.03.04 09:50) [19]
Тут точно индексы бессильны, но подобные случаи в медицине описаны... 8-)
← →
stud © (2004-03-29 10:02) [22]
> Anatoly Podgoretsky © (29.03.04 09:52) [20]
вы так думаете?))
если проблема научить этих пользователей отличать запятую от точки.... не говоря о том, чтобы просто найти нужного человека в базе
← →
Sergey13 © (2004-03-29 10:15) [23]stud © (29.03.04 09:50) [19]
>в медицине идентификация пациента происходит по четырем полям - ф.и.о.дата рождения.
А в БД идентификация происходит по уникальному идентификатору, в качестве которого могут выступать как сурогатные данные (автоинкремент в разных исполнениях) так и естественные (например номер паспорта). Для реализации такого механизма и нужны программисты. 8-)
← →
stud © (2004-03-29 10:27) [24]
> А в БД идентификация происходит по уникальному идентификатору,
> в качестве которого могут выступать как сурогатные данные
> (автоинкремент в разных исполнениях) так и естественные
> (например номер паспорта). Для реализации такого механизма
> и нужны программисты. 8-)
согласен. осталось только заставить людей вводить такие данные как паспортные или хотя-бы что-то еще кроме фио. а то ведь когда сделал ввод этих данных обязательным - визгу было!!!! нам некогда, мы не хотим, это не важно.)))) интересно как прогарммировать такие заявки? суть простая, программа должна работать не с теми данными которые нужны для нормального функционирования, а с теми которые нам не лень вводить. доказывать что-либо бесполезно))
← →
Sergey13 © (2004-03-29 10:35) [25]2stud © (29.03.04 10:27) [24]
А код генерить на каждого вводимого нельзя что ли? А когда у них появится несколько Ивановых Иванов Ивановичей с д/р 01.01.01 сказать - а не пошли бы вы подальше и предъявить им человека который вводил таких в справочник (это элементарно организовать даже незаметно для юзера). После этого сорвать денюжку за исправление ситуации. 8-)
← →
stud © (2004-03-29 10:41) [26]так говорил и показывал кто виновник торжества.
а вы не сталкивались с ситуацией, когда приходит большое начальство и спрашивает: почему программа не работает?
ты ему: да вот данные не вводят необходимые!!!
оно: я не спрашиваю кто что вводит, я спрашиваю почему программа не работает.
а ради интереса подсчитал двойников и даже тройников.
автоматизация деятельности - это комплекс административно-технических мероприятий. если административная часть пущена на самотек, то реализовать техничекую часть весьма сложно. иногда даже невозможно....
а вы ключи, ключи))))
← →
Sergey13 © (2004-03-29 10:53) [27]2stud © (29.03.04 10:41) [26]
С такими начальниками надо бороться их же оружием.
1. Сделать примерно так как я написал в [25]
2. Написать служебную записку с понятным и доходчивым обоснованием того, что неправильный ввод влечет за собой неправильный вывод.
Все. При возникновении коллизий тыкать всех в копию служебной. Если не поможет - искать другую работу.
← →
stud © (2004-03-29 10:57) [28]тут самый действенный вариант - 3)))
чем и занимаюсь
← →
Жук © (2004-03-29 11:31) [29]Когда автоматизируются доселе не затронутые области, разработчику, естественно, нужен какой-то административный ресурс. По себе знаю, что отношение к тебе потенциальных юзверей становится более пиетическим, когда представляешься не "программист отдела АСУ", а "Руководитель рабочей группы по автоматизации учёта" :-)
← →
Sergey13 © (2004-03-29 11:53) [30]2Жук © (29.03.04 11:31) [29]
А еще хорошо красные корочки показать и так вкрадчиво спросить: "А какие у вас, собственно, возражения по внесению информации? И как ваша фамилия?"
← →
Deniz © (2004-03-29 12:37) [31]> stud © (29.03.04 10:41) [26]
Дожились, начальство Вас наказывает, а Вы стараетесь пользователям угодить. Значит надо наказывать пользователя(ведь это они жалуются). Например, заставить вводить ВСЕ необходимые данные + служебка и в итоге перевести все разборки по функцианалу на служебные записки.
← →
stud © (2004-03-29 12:47) [32]в теории все замечательно выглядит............))))
но в жизни все относительно однако))
← →
Sergey13 © (2004-03-29 12:52) [33]2stud © (29.03.04 12:47) [32]
Так возят на том, кто везет, как правило, и не взбрыкивает. Их же потом делают стрелочниками, иногда.
ЗЫ:
Все больше подходит для переноса в треп.
← →
stud © (2004-03-29 12:53) [34]пора заканчивать )) а то скоро слезы пойдут))))
← →
Fay © (2004-03-29 14:40) [35]Служебки - реальное решение. Проверено!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.036 c