Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
26 / 26 / 5
Регистрация: 29.05.2013
Сообщений: 151

Как избежать дублирования записей?

22.09.2013, 00:58. Показов 3026. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос, наверное, совсем идиотский, но я новичок, уж простите.

Создал в MS SQL таблицу Owners с двумя полями (*OwnerID, FIO). OwnerID - ключ с автоинкрементом. Добавляю запись, указывая при добавлении только FIO, ключ подставляется автоматически и все вообще как для первого раза проходит замечательно и без сбоев.

При добавлении следующей записи с таким же значением ФИО, также происходит добавление. Оно и должно, бо подставляется новый ключ и имеем две вроде как уникальных записи (по ID), но по факту совершенно одинаковых:

1 Петров
2 Петров

Как этого принято избегать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.09.2013, 00:58
Ответы с готовыми решениями:

Как избежать дублирования пользователей?
Как сделать, что бы при добавление в БД пользователи не повторялись Дополните код: MySqlCommand sqlCmd = new...

Как избежать дублирования сообщений ?
В гостевой книге или в форуме. Заполняешь форму отсылаешь, и вдруг взбрело в голову обновить страницу, и она вызыватся с теми же...

Как избежать дублирования кода? Наследование
Здравствуйте. У меня следующая проблема: Есть несколько классов: A, B, C. Они наследуются от основного класса: BASE Есть по одному...

9
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
22.09.2013, 11:04
Ставить на нужное поле ограничение UNIQUE.
T-SQL
1
ALTER TABLE Owners ADD CONSTRAINT FIO_Unique UNIQUE(FIO)
Перед выполнением скрипта в целевом столбце таблицы не должно быть повторяющихся значений.
1
26 / 26 / 5
Регистрация: 29.05.2013
Сообщений: 151
22.09.2013, 12:38  [ТС]
Спасибо! Пожалуй это в какой-то степени выход. В моем случае c Owners связана таблица Phones (*PhoneID, Phone, OwnerID(FK)). Поставлю UNIQUE на поле Phone.

Однако, вопрос общего характера.
Пусть в таблице Собственники не одно поле, а 10-12. На все ставить ограничение?

Далее, например, поле "Адрес" для нужд предприятия использующего БД играет второстепенную роль: м.б. NULL (кстати, в документации Microsoft пока не понял, UNIQUE на поле Allow NULL можно поставить?), например; или на одного и того же клиента секретарша вбила в это поле Адрес в первом случае добавления "ул. Ленина", а во втором случае добавления этого же товарища "у. Ленина" и ЮНИК не сработал. Менять секретаршу или есть подходы?
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
22.09.2013, 12:48
Конечно же ограничение UNIQUE не нужно лепить куда попало.
По поводу клиентов: зачем для одного и того же клиента вводить несколько раз его адрес? Достаточно один раз занести всю информацию о нем в таблицу (заранее продумав какая информация должна быть уникальна для одной записи) и потом использовать данные из этой таблицы столько сколько нужно.
0
26 / 26 / 5
Регистрация: 29.05.2013
Сообщений: 151
22.09.2013, 13:06  [ТС]
Цитата Сообщение от Kruds Посмотреть сообщение
По поводу клиентов: зачем для одного и того же клиента вводить несколько раз его адрес?
Незачем, конечно, но так иногда бывает.
Пример: ну, звонит в агентство недвижимости "Ч" товарищ Петров и просит: "А занесите мою квартиру в БД на продажу!?". Ну секретарша и занесла, и вбила при опросе Петрова в поле Адрес "ул. Ленина" . Звонит через 2 дня в агентство "Ч" опять Петров (он обзванивает все агентства чтоб поставить кв-ру на продажу, и что в "Ч" уже звонил, забыл, конечно). Ну и секретарша, конечно, не помнит про эту уже внесенную квартиру. И по новой забивает данные о кв-ре Петрова. И в этот раз вводит "у. Ленина". Получается две одинаковых квартиры в БД. В качестве поля Адрес может выступать в этом примере любое другое, т.е. размышления нрсят общий характер... Таки менять секретаря?
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
22.09.2013, 13:12
Тогда стоит вовсе исключить рукописный ввод данных. Пусть секретарь выбирает из списков адрес клиента, населенный пункт и улицу по крайней мере.
0
26 / 26 / 5
Регистрация: 29.05.2013
Сообщений: 151
22.09.2013, 13:15  [ТС]
Я к тому, что избежать дублирования вообще можно только ценой невиданного геморроя, как средствами SQL так и средствами клиентского интерфейса, в ущерб быстродействию.

С другой стороны, дублирование - тоже ущерб быстродействию.

Т.е. тут нужно искать компромисс. Или я не прав?
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
22.09.2013, 13:23
Едва ли так уж сложно создать в БД таблицу "город - улица" и обновлять ее время от времени. Да и быстродействие при таком раскладе врядли пострадает. А вот правильность хранящихся данных куда ценнее на мой взгляд.
0
26 / 26 / 5
Регистрация: 29.05.2013
Сообщений: 151
22.09.2013, 13:44  [ТС]
Так как вы предлагаете, я поступил с районами, бо их меньше двух десятков. А вот реестра улиц моего города у меня (и в природе тоже) нет для копипасты, увы. А с бумаги вводить (не факт, что тоже есть) пусть негры вводят. И, опять же, специфика такова, что адрес совсем не обязателен. Если интерфейсом заставить оператора вводить его обязательно или придерживаясь "маски" скажут: "Вертай назад Excel! Там можно вводить или не вводить шо хошь!"

И, повторюсь, не идет речь именно об адресе. Ну, пусть площадь кв-ры, к-рую Петров в первом разговоре с секретарем назовет 54 кв. м., а во втором 55 кв.м.?

Пока решил, что оптимальным будет проверка лишь по номеру телефона, при ошибке ввода с № тел - дубли, коих в связи со спецификой работы агентства будет не так и много - там всего тех записей значительно меньше пятисот.
0
 Аватар для Kruds
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
22.09.2013, 13:59
Быть может это вам окажется полезным.
Еще, как вариант, можно обязать операторов при занесении визуально проверять список объектов которые клиент уже регистрировал. Сомневаюсь что их там десятки и это невозможно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.09.2013, 13:59
Помогаю со студенческими работами здесь

Избежать дублирования контента
Добрый день. Искал такую тему в интернете, но ничего конкретного не нашёл. В ASP.NET адреса: mydomain.com/Home/Index mydomain.com/Home ...

Избежать дублирования кода
Доброго времени суток, имеется метод записи данных. Записываю из Dictionary, проблема в том, что словари разные, первый <double,...

Избежать дублирования проверок при выполнении метода
Предположим, у банка есть метод который осуществляет перевод денег со счета на счет. В нем есть проверка на наличие необходимой суммы на...

Как избежать дублирования кода в Си
Допустим, есть такие структуры данных: enum Color{ Red, Blue, Black, White }; struct Car{ char*...

Как избежать дублирования кода?
Приветствую Вас уважаемые форумчане! Хочу обратиться к Вам за помощью. Возникли огромные пробелы в Java OOP , либо же я не до конца...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru