Blokada wprowadzania duplikatów rekordów

Użytkowanie programu bazodanowego
arturpl
Posty: 2
Rejestracja: sob maja 25, 2013 8:46 am

Blokada wprowadzania duplikatów rekordów

Post autor: arturpl »

Witam,

Korzystam z LibreOffice 4.0.3.3 portable
Moja przygoda z LO, i bazami danych dopiero się zaczyna
Zrobiłem w base tabele pracowników o strukturze:

Kod: Zaznacz cały

idosoby(integer)(klucz główny)
idkadrowy(varchar)
imie(varchar)
nazwisko(varchar)
Jak zabezpieczyć się przed wprowadzeniem ponownie osoby z tym samym idkadrowy?

edit:
pole idosoby ma ustawioną właściwość wartość automatyczna na 'tak' zrobiłem sobie formularz do wprowadzania danych i gdy chce wstawić rekord bez wpisania wartości w pole idosoby (bo ma być wprowadzane automatyczne numerowanie wierszy) to przy próbie zapisu sypie błędem:
Attempt to insert null into a non-nullable column: column: idosoby table: Ludzie in statement [INSERT INTO "Ludzie" ("idkadrowy","imie","nazwisko") VALUES ( ?,?,?,?)]
LibreOffice 4.0.3.3 Portable (PAF) / Windows 7
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Blokada wprowadzania duplikatów rekordów

Post autor: Jan_J »

Być może nie wszystko jest dostępne w formularzach tworzenia tabel, ale da się zrobić znacznie więcej.
Bazy SQL-owe mają w standardzie m.in. wymuszanie tzw. ograniczeń unikalności. Mogą one dotyczyć jednej kolumny albo zespołu kolumn.

Przykład dla jednej kolumny: numer dokumentu tożsamości nie może się powtórzyć (mimo że nie jest kluczem w bazie). Po utworzeniu tabeli osoby z polem nr_dok

Kod: Zaznacz cały

ALTER TABLE "osoby" ADD CONSTRAINT "unikalny_nr_dok" UNIQUE ("nr_dok");
Przykład dla dwóch kolumn: pracownik może mieć upoważnienia do pobierania kluczy. Niedopuszczalne jest, by ten sam pracownik miał dwa upoważnienia do tego samego klucza

Kod: Zaznacz cały

ALTER TABLE "upowaznienia" ADD CONSTRAINT "pracownik_klucz" UNIQUE ("id_prac", "id_klucz");
(jest to pewne uproszczenie, bo na przestrzeni czasu upoważnień może być więcej).

Więcej dla HSQL DB 1.8 (system baz danych wbudowany w OOo|LO): http://hsqldb.org/doc/1.8/guide/ch02.html#N102DF
Więcej dla OOo Base, np. http://www.oooforum.org/forum/viewtopic.phtml?t=132899
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
arturpl
Posty: 2
Rejestracja: sob maja 25, 2013 8:46 am

Re: Blokada wprowadzania duplikatów rekordów

Post autor: arturpl »

Dzięki, rozumiem zatem że wiele rzeczy można osiągnąć, ale nie można ich wyklikać, trzeba wpisać komendy sqlowe z palca?, a jest jakaś dokumentacja offline dla tej bazy?
LibreOffice 4.0.3.3 Portable (PAF) / Windows 7
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Blokada wprowadzania duplikatów rekordów

Post autor: Jan_J »

W poście wyżej odesłanie do online. Jest tam pdf do pobrania.
Dotyczy to wyłącznie sytuacji, kiedy dane są przechowywane w odb. Base potrafi współpracować z innymi systemami przechowywania danych, każdy ma własną dokumentację. Klauzulę unique w więzach powinny rozumieć wszystkie warte zainteresowania.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ