Рекомендуется избегать повторяющихся записей данных в базе данных mysql
Я просматривал различные веб - сайты в поисках метода "наилучшей практики", когда пытался избежать повторяющихся записей в базе данных MySQL.
Я действительно нашел основную информацию о том, как обнаруживать повторяющиеся записи, но мне все еще не удается найти существенную информацию о том, как реализовать полное решение для обнаружения дублирования, а затем контролировать процесс выполнения в хранимой процедуре.
Я думаю, что именно здесь мне теперь придется объясниться лучше:
Я собираю демографическую информацию о пациентах и вставляю ее в базу данных MySQL. Эта информация специфична для:
Терпеливый
|
-- Сведения о пациенте (таблица)
|
-- Контактные данные пациента (таблица)
|
-- Информация об адресе пациента - улица и Почта (таблица)
|
-- Сведения о медицинском страховании пациента (таблица)
|
-- Сведения о ближайших родственниках пациента (таблица)
|
-- Сведения о работодателе пациента (таблица)
Валидация выполняется на "деталях пациента" (имя, фамилия, SSN, DOB и т. д.) Со следующим SP:
DELIMITER $$ CREATE DEFINER=`rootuser`@`%` PROCEDURE `SP_patAddDetails`( /*IN pFileNo VARCHAR(11),*/ IN pKey VARCHAR(1), IN pTitle VARCHAR(15), IN pFirstName VARCHAR(30), IN pInitials VARCHAR(5), IN pSurname VARCHAR(30), IN pIDNo VARCHAR(15), IN pDOB VARCHAR(10), IN pGender VARCHAR(8), IN pLanguage VARCHAR(15), IN pOccupation VARCHAR(30), IN pDependantCode VARCHAR(2), IN pRelationship VARCHAR(15), IN pMemNo VARCHAR(20), IN pDateOpened VARCHAR(10) ) BEGIN START TRANSACTION; INSERT INTO patDetails(patKey, patTitle, patFirstName, patInitials, patSurname, patIDNo, patDOB, patGender, patLanguage, patOccupation, patDependantCode, patRelationship, patMemNo, patDateOpened, patUpdated) /* INSERT INTO patDetails(patFileNo, patKey, patTitle, patFirstName, patInitials, patSurname, patIDNo, patDOB, patGender, patLanguage, patOccupation, patDependantCode, patRelationship, patMemNo, patUpdated, patDateOpened) */ /* to avoid duplicate entries during the patient add process check to see if patient already exist in the patDetails table */ SELECT * FROM (SELECT pKey, pTitle, pFirstName, pInitials, pSurname, pIDNo, pDOB, pGender, pLanguage, pOccupation, pDependantCode, pRelationship, pMemNo, pDateOpened, now()) AS tmp /* SELECT * FROM (SELECT pFileNo, pKey, pTitle, pFirstName, pInitials, pSurname, pIDNo, pDOB, pGender, pLanguage, pOccupation, pDependantCode, pRelationship, pMemNo, now()) AS tmp, pDateOpened */ WHERE NOT EXISTS ( SELECT patTitle, patFirstName, patInitials, patSurname, patDOB, patMemNo FROM patDetails WHERE patTitle = pTitle AND patFirstName = pFirstName AND patInitials = pInitials AND patSurname = pSurname AND patDOB = pDOB AND patMemNo = pMemNo ) LIMIT 1; /* WHERE NOT EXISTS ( SELECT patFileNo, patKey, patTitle, patFirstName, patInitials, patSurname FROM patDetails WHERE patFileNo = pFileNo AND patKey = pKey AND patTitle = pTitle AND patFirstName = pFirstName AND patInitials = pInitials AND patSurname = pSurname ) LIMIT 1; */ COMMIT; SELECT LAST_INSERT_ID() COMMIT; END
В настоящее время я контролирую процесс валидации внутри своего компьютера. VB.net формирует приложение, проверяя, не вернулось ли мне новое удостоверение личности базы данных. Если возвращается новый идентификатор, я знаю, что проверка прошла, данные пациента были записаны в БД, и я получаю новый идентификатор БД, который затем могу использовать в качестве внешнего ключа во время остальной части процесса. (Я с удовольствием отредактирую этот пост, чтобы удалить все отмеченные строки кода, которые я пробовал, если он имеет какие-либо трудности с чтением)
Я хочу верить, что существует гораздо более логичный метод сделать это внутри MySQL, а не снаружи, но я, кажется, не нахожу необходимой информации для достижения этой цели...возможно, это должно быть сделано из приложения, а не изнутри MySQL (в чем я хочу ошибаться).
С уважением,
Т
Что я уже пробовал:
В хранимой процедуре есть прокомментированные строки кода вещей, которые я пробовал, но это все еще процесс, который он контролировал вне MySQL.
-правка: грамматика