Odpowiednie powiązanie kluczy w bazie danych

0

Witam , mam problem z odpowiednim powiązaniem kluczy głównych z kluczami pobocznymi . Zaprojektowałem bazę danych na swoje potrzeby ćwiczeniowe jednak przy próbie załadowania danych do ostatniej tabeli otrzymuję błąd ORA- 02291.

Bazę pisałem wg. schematu który miałem na ćwiczeniach na uczelni jednak mam problem z odpowiednim powiązaniem danych zw tabeli ostatniej .

 

CREATE TABLE bdz12_produkt
(
  id_produktu INT CONSTRAINT bdz12_produkt_pk PRIMARY KEY,
  nazwa_produktu VARCHAR2(100),
  typ VARCHAR2(20),
  ilosc INT,
  cena_netto DECIMAL(10,2),
  cena_brutto DECIMAL (10,2)
 );
CREATE TABLE bdz12_faktura
(
  id_faktury INT CONSTRAINT bdz12_faktura_pk  PRIMARY KEY,
  nr_faktury DECIMAL (10,0));
CREATE TABLE bdz12_miasto
(
  id_miasta INT CONSTRAINT bdz12_miasto_pk  PRIMARY KEY,
  nazwa_miasta VARCHAR2(100));

CREATE TABLE bdz12_sklep
(
  id_sklep INT CONSTRAINT bdz12_sklep_pk  PRIMARY KEY,
  nazwa VARCHAR2(30),
  ulica VARCHAR2(20),
  id_miasta INT CONSTRAINT   id_miasta_fk  REFERENCES bdz12_miasto(id_miasta),
  telefon VARCHAR2(10));

CREATE TABLE bdz12_data
(
  id_data INT CONSTRAINT bdz12_data_pk  PRIMARY KEY,
  data DATE
);
CREATE TABLE bdz12_pracownik
(
  id_pracownika INT CONSTRAINT bdz12_pracownik_pk  PRIMARY KEY ,
  imie VARCHAR2(20),
  nazwisko VARCHAR2(20),
  pesel DECIMAL(11,0),
  telefon VARCHAR2(10)
);
 
CREATE TABLE bdz12_sprzedaz(

  id_sprzedazy INT  CONSTRAINT bdz12_sprzedazy_pk PRIMARY KEY,
  id_faktury INT CONSTRAINT bdz12_faktury_fk  REFERENCES bdz12_faktura(id_faktury),
  id_pracownika INT CONSTRAINT bdz12_pracownika_fk REFERENCES bdz12_pracownik(id_pracownika),
  id_data INT CONSTRAINT bdz12_data_fk  REFERENCES bdz12_data(id_data),
  id_sklep INT CONSTRAINT bdz12_sklep_fk REFERENCES bdz12_sklep(id_sklep),
  id_produktu INT CONSTRAINT bdz12_produktu_fk  REFERENCES bdz12_produkt(id_produktu),
  wartosc DECIMAL(10,0)
  
  );
1

podaj jakie dane wstawiasz

0

Dane są w pliku csv i wstawiam je przy pomocy sqlldr . W szkole na zajęciach mi bez problemu z tych dwóch plików weszły a teraz w domu mam problem żeby je wstawić ;/

ctlka przygotowana następująca

OPTIONS (SKIP=1) 
load data
	infile 'C:\sprzedaz.csv'
	into table sprzedaz
	fields terminated by ";" optionally enclosed by '"'
	(   id_sprzedazy,
  id_faktury,
  id_pracownika,          
  id_data,     
  id_sklep,
id_produktu,
    wartosc
 ) 

a tutaj csv-ka

http://www55.zippyshare.com/v/bL60A9kc/file.html

1

no dobra ale to ładujesz do tabeli sprzedaż a ładujesz najpierw pozostałe tabele?

0

Do tabeli sprzedaż wrzucam na sam koniec tak sam jak na laboratorium w szkole .

1

cieszy mnie to niezmiernie...
Ale rozumiesz, że jeśli krzyczy Ci, że jest błąd z kluczem obcym to po prostu NIE MA rekordu w tabeli nadrzędnej do którego się próbujesz odwołać wstawiając rekord do tabeli podrzędnej. Więc albo masz niekompletne dane albo nie wszystko Ci się importuje. Jedyna opcja to wyczaić, który rekord powoduje integrity constraint violation i zobaczyć do jakiego rekordu się odwołuje a potem sprawdzić czy taki rekord jest w bazie a jak go nie ma to czy jest w csv.

0

Prześledziłem csv- ke i jeden problem już mam z głowy zostały mi same rekordy z tabeli sprzedaż nie chcą wejść za cholerę .

Nie widzą klucza rodzica , może trzeba coś zmienić w zapisie dlatego wstawiłem cała bazę na forum a nie część .

 
Record 1: Rejected - Error on table SPRZEDAZ.
ORA-02291: integrity constraint (SYSTEM.DATA_FK) violated - parent key not found

Record 2: Rejected - Error on table SPRZEDAZ.
ORA-02291: integrity constraint (SYSTEM.DATA_FK) violated - parent key not found

Record 3: Rejected - Error on table SPRZEDAZ.
ORA-02291: integrity constraint (SYSTEM.DATA_FK) violated - parent key not found

Record 25: Rejected - Error on table SPRZEDAZ.
ORA-02291: integrity constraint (SYSTEM.SKLEP_FK) violated - parent key not found

Record 26: Rejected - Error on table SPRZEDAZ.
ORA-02291: integrity constraint (SYSTEM.SKLEP_FK) violated - parent key not found

 

Został mi problem z tabelą sklep i jakiś problem z tabelą daty ;/

Generalnie mam już taką ilość danych która mi wystarczy do sprawozdania jednak wolałbym się pozbyć tych błędów z ostatniej tabeli sprzedaży .

1

po pierwsze wstawiłeś tylko jeden plik i to ten, który potrzebuje wszystkich pozostałych aby go można było zaimportować - ktoś ma coś z tego wywróżyć czy jak?
Mam wrażenie, że nie masz pojęcia o co chodzi z tym błędem. Jeśli tak to wpisz sobie numer do gugla i poczytaj. Najprościej rzecz ujmując w tabelach, do których odnoszą się FK z tabeli sprzedaz, nie ma rekordów, na które wskazują importowane dane. Poczytaj co to jest klucz obcy i do czego służy - powinno Ci to rozjaśnić problem.

0

Nie chcę żeby ktoś wróżył tylko pomógł jeden błąd już znalazłem widoczny gołym okiem
Jutro nad tym jeszcze raz usiądę zwyczajne zmęczenie materiału jak na przykładzie poniżej parę literek i już nie działa .

**abrakadaber ** doczytam sobie te lekturę ale właśnie po to wstawiam to na forum żeby otrzymać pomoc a nie same linki .

 
  id_miasta INT CONSTRAINT   id_miasta_fk  REFERENCES bdz12_miasto(id_miasta),

a powinno być oczywiście :

  id_miasta INT CONSTRAINT bdz12_id_miasta_fk  REFERENCES bdz12_miasto(id_miasta),
1

Puść loadera z opcją "BAD=baz.bad" i zobacz po wykonaniu, które rekordy ci odrzuciło.
Jeśli już będziesz miał rekordy to sprawdzasz w tabelach powiązanych czy masz rekordy powiązane FK.

1

daj pozostałe ctle

0
abrakadaber napisał(a):

daj pozostałe ctle

Proszę Ctle + csv

http://tnij.org/ctl_csv

1

Według tego co zamieściłeś w ostatnim poście i opcjach loadera pomijasz pierwszy wiersz csv, chodzi o linię w pliku ctl:

 OPTIONS (SKIP=1) 

Jako że nie masz nagłówków to tracisz rekordy i już na ładowaniu do BDZ12_SKLEP ja dostałem:

 Record 2: Rejected - Error on table BDZ12_SKLEP.
ORA-02291: integrity constraint (STUDENT.ID_MIASTA_FK) violated - parent key not found


Table BDZ12_SKLEP:
  18 Rows successfully loaded.
  1 Row not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.

i odrzuciło wiersz z pierwszym miastem:

 3;Sklep Filia  nr 3;Topolowa 56;1;333-333-33

Co dziwne w pierwszym załączonym csv nagłówki istnieją....

1

EDIT:

W pracownikach i produktach nie masz tej opcji i loader poprawnie ładuje dane.
Ja zamieniłem opcje w pozostałych plikach ctl na

 OPTIONS (SKIP=0) 

i cały proces ładowania wykonał się bez błędów.
Twój problem jest spowodowany właśnie tą opcją.

0

Wszystko działa jak powinno teraz . Wcześniej ctl-ki miały nagłówki i dlatego miałem skip = 1 kompletnie o tym zapomniałem i przez taką pierdołę tyle nerwów i straconego czasu .

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