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

Problem z budową Bazy Relacyjnej

0 głosów
37 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 Gaduła (3,420 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 Gaduła (3,420 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ź 146 wizyt
0 głosów
2 odpowiedzi 108 wizyt
pytanie zadane 25 grudnia 2017 w Java przez marcinconn Obywatel (1,360 p.)
0 głosów
1 odpowiedź 725 wizyt
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

66,324 zapytań

113,061 odpowiedzi

239,218 komentarzy

46,589 pasjonatów

Przeglądających: 255
Pasjonatów: 8 Gości: 247

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...