|
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
|
|
| 22.09.2013, 00:58 | |
|
Ответы с готовыми решениями:
9
Как избежать дублирования пользователей? Как избежать дублирования сообщений ?
|
|
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
|
||||||
| 22.09.2013, 11:04 | ||||||
|
Ставить на нужное поле ограничение UNIQUE.
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
|
|
|
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 [ТС] | ||
|
Пример: ну, звонит в агентство недвижимости "Ч" товарищ Петров и просит: "А занесите мою квартиру в БД на продажу!?". Ну секретарша и занесла, и вбила при опросе Петрова в поле Адрес "ул. Ленина" . Звонит через 2 дня в агентство "Ч" опять Петров (он обзванивает все агентства чтоб поставить кв-ру на продажу, и что в "Ч" уже звонил, забыл, конечно). Ну и секретарша, конечно, не помнит про эту уже внесенную квартиру. И по новой забивает данные о кв-ре Петрова. И в этот раз вводит "у. Ленина". Получается две одинаковых квартиры в БД. В качестве поля Адрес может выступать в этом примере любое другое, т.е. размышления нрсят общий характер... Таки менять секретаря?
0
|
||
|
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
|
|
|
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
|
|
|
708 / 708 / 226
Регистрация: 04.03.2013
Сообщений: 1,384
|
|
| 22.09.2013, 13:59 | |
|
Быть может это вам окажется полезным.
Еще, как вариант, можно обязать операторов при занесении визуально проверять список объектов которые клиент уже регистрировал. Сомневаюсь что их там десятки и это невозможно
0
|
|
| 22.09.2013, 13:59 | |
|
Помогаю со студенческими работами здесь
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
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|