• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z budową Bazy Relacyjnej

Object Storage Arubacloud
0 głosów
123 wizyt
pytanie zadane 4 grudnia 2018 w SQL, bazy danych przez Michał Bieniek Nowicjusz (180 p.)
otagowane ponownie 4 grudnia 2018 przez Michał Bieniek

Witam,
Proszę o podpowiedz dot. poniżej podanego kodu.
Mianowicie nie potrafię poradzić sobie z błędami:

1. There are no primary or candidate keys in the referenced table 'Zamowienia' that match the referencing column list in the foreign key 'FK__Faktury__Ilosc_W__440B1D61'.

2.Could not create constraint or index. See previous errors.

3.Column name or number of supplied values does not match table definition.

Z góry dziękuję za wszelką pomoc 
 

CREATE Database Piekarnia 

GO 

USE Piekarnia; 

GO 

CREATE TABLE Wyroby( 

Id_Wyrobu INT IDENTITY(1,1) PRIMARY KEY, 

Nazwa_Wyrobu VARCHAR(60) NOT NULL, 

Cena_Wyrobu smallmoney Not NULL, 

Waga_Wyrobu FLOAT Not NULL, 

); 

GO 

CREATE TABLE Pracownicy( 

Id_Pracownika INT IDENTITY(1,1)PRIMARY KEY, 

Imie VARCHAR(60) NOT NULL, 

Nazwisko VARCHAR(60) NOT NULL, 

Telefon CHAR(12) NOT NULL, 

Stanowisko Varchar(40) NOT NULL, 

) 

GO 

CREATE TABLE Klienci( 

Id_Klienta INT IDENTITY(1,1)PRIMARY KEY,  

Imie VARCHAR(60) NOT NULL, 

Nazwisko VARCHAR(60) NOT NULL, 

Adres VARCHAR(60) NOT NULL, 

); 

GO 

CREATE TABLE Zamowienia( 

Id_Zamówienia INT IDENTITY(1,1)PRIMARY KEY,  

Id_Wyrobu INT FOREIGN KEY REFERENCES Wyroby(Id_Wyrobu) ON DELETE CASCADE ON UPDATE CASCADE,  

Id_Klienta INT FOREIGN KEY REFERENCES Klienci(Id_Klienta) ON DELETE CASCADE ON UPDATE CASCADE,  

Ilosc_Wyrobu INT, 

Data_zamowienia DATETIME Not Null default getdate(), 

);  

GO  

CREATE TABLE Faktury( 

Id_Faktury INT IDENTITY(1,1)PRIMARY KEY,  

Id_Wyrobu INT FOREIGN KEY REFERENCES Wyroby(Id_Wyrobu) ON DELETE CASCADE ON UPDATE CASCADE,

Id_Klienta INT FOREIGN KEY REFERENCES Klienci(Id_Klienta) ON DELETE CASCADE ON UPDATE CASCADE,  

Ilosc_Wyrobu INT FOREIGN KEY REFERENCES Zamowienia(Ilosc_Wyrobu) ON DELETE CASCADE ON UPDATE CASCADE,  

Cena_Wyrobu smallmoney FOREIGN KEY REFERENCES Wyroby(Cena_Wyrobu) ON DELETE CASCADE ON UPDATE CASCADE,   

); 

GO 

INSERT INTO Wyroby  VALUES ('Chleb Pszenny',1.99,1.2),   

('Chleb Wiejski',2.99,0.7),    

('Chleb Pasterski',1.49,0.8),    

('Kajzerka',0.99,0.05);   

GO    

INSERT INTO  Pracownicy VALUES ('Grzegorz','Kowalski',111222333,'Piecowy'),  

('Andrzej','Piekarski',444555666,'Pomocnik'),  

('Sylwester','Przybyła',777888999,'Kierownik');   

GO   

INSERT INTO Klienci VALUES ('Stanisław', 'Lem', 'Warszawa Kolorowa 10'), 

('Bogumił', 'Wawrzyszew', 'Warszawa Dębowa 5'), 

('Czesław', 'Mozil', 'Warszawa Klonowa 11'); 

GO 

Insert Into Zamowienia VALUES (100), 

(200), 

(300); 

 GO 

 

komentarz 4 grudnia 2018 przez areklipno Stary wyjadacz (11,930 p.)
Proponuję puszczać zapytania pojedynczo - wtedy łatwiej zlokalizować błąd - będzie można skupić się na jednej tabeli, a potem na kolumnach (drop table i od nowa create table z dodaniem kolejnej kolumny).

Tak na szybko wg  mnie problem będzie z ilością lub/i ceną wyrobu.

1 odpowiedź

0 głosów
odpowiedź 4 grudnia 2018 przez Michał Bieniek Nowicjusz (180 p.)
Zakładam klucz obcy pod ilość i cenę wyrobu ponieważ chce 'przepisywać' dane z tabeli.

Mianowicie:
Po wpisaniu w tabeli Zamowienia ilości wyrobu chce otrzymać tą ilość w Tabeli Faktury
Po wpisaniu w tabeli Wyroby ceny danego wyrobu chce otrzymać tą liczbę w Tabeli Faktury

Zakładam, że to błędny tok rozumowania..
komentarz 4 grudnia 2018 przez areklipno Stary wyjadacz (11,930 p.)
klucze obce nie służą do przepisywania - służą one do utrzymania spójności danych - np. blokujesz możliwość dodania zamówienia dla klienta 231 bo w tabeli klienci są tylko klienci o id pomiędzy 0 a 200. (nie można dodać do kolumny czegoś czego nie  ma w kluczu)

To co piszesz - taka sama ilość na fakturze mógłbyś rozwiązać np. poprzez dodanie id_zamowienia (to może być klucz obcy) do tabeli faktury, a na triggerze (wyzwalaczu) sprawdzić czy ilości są takie same (wpisywana i na zamowieniu).

Podobne pytania

+1 głos
1 odpowiedź 305 wizyt
0 głosów
2 odpowiedzi 186 wizyt
pytanie zadane 25 grudnia 2017 w Java przez marcinconn Obywatel (1,560 p.)
0 głosów
1 odpowiedź 257 wizyt

92,555 zapytań

141,402 odpowiedzi

319,539 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...