[SQLITE] Nadpisywanie tych samych rekordów

0

Mam baze danych z tabelami:
CREATE TABLE Pacjent(Imie VARCHAR(20),Nazwisko VARCHAR(20),Dataurodzenia VARCHAR(11),Plec VARCHAR(1),Wiek VARCHAR(3),id_p INTEGER UNIQUE PRIMARY KEY);

CREATE TABLE Dysk(NazwaPlyty VARCHAR(20),DataArch VARCHAR(8),id_p INTEGER,id_d INTEGER UNIQUE PRIMARY KEY);

i teraz chce żeby było tak że jak bede dodawal dane do tabeli Pacjent to jeśli nowy dodawany rekord jest taki sam jak juz istniejacy w bazie(tzn ma takie same pola jak imie, nazwisko , data urodzenia) to żeby nowy rekord sie nie dodawał.
Pomyslałem żeby napisac triggera:

mój pierwszy pomysł. Działa jak jest tylko wpisany pierwszy warunek po where, a w poniższej formie nie działa:

create trigger dodaj_pacjenta before insert on Pacjent
begin
    delete from Pacjent where Nazwisko=new.Nazwisko & Imie=new.Imie & Dataurodzenia=new.Dataurodzenia ;
end;

Jednak koncepcyjnie nie chciałbym zeby tak było j.w. bo wiązało by się to ze zmianą id w momencie dodawania takiego samego rekordu, a id bedzie mi potrzebne w tabeli dysk

inymi słowy jak zrobic tak żeby dodawanie nowego takiego samego rekordu do bazy Pacjent nie powodowało dodanie nowego rekordu jesli juz taki w bazie istnieje no i id starego wpisu nie może sie zmienić?

0

ale po co?? Jeśli user DODAJE NOWEGO a nie edytuje starego 'pacjenta' to widać ma ku temu powód i należy mu to umożliwić.

0

Własnie user tego nie bedzie robił (program bedzie zczytywal kolejne pliki, w których te dane siła rzeczy sie powtarzają), i zależy mi na tym, żeby nie było zduplikowanych rekordów: imie, nazwisko, data urodzenia.

0

no to masz dwie opcje

  1. SELECT id FROM pacjenci WHERE imie = '' AND nazwisko = '' AND data_ur = ''

    sprawdzasz czy dostałeś jakiś rekord i jak dostałeś to update z otrzymanym ID a jak nie to insert

  2. UPDATE pacjenci SET xx=yy, ... WHERE imie = '' AND nazwisko = '' AND data_ur = ''

    i sprawdzasz czy jakiś rekord został uaktualniony i jak nie to insert

0

Najbezpieczniej i najszybciej jest utworzyć unique index na polu, którego wartości nie mogą się powtarzać. W razie wstawienia powtarzającej się wartości dostaniesz wyjątek o treści komunikatu "key violation".

0

Dzięki Misiekd twój pomysł sie sprawdził.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0