• 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
29 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 Bywalec (2,740 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 Bywalec (2,740 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ź 134 wizyt
0 głosów
2 odpowiedzi 104 wizyt
pytanie zadane 25 grudnia 2017 w Java przez marcinconn Obywatel (1,120 p.)
0 głosów
1 odpowiedź 615 wizyt
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

63,369 zapytań

109,637 odpowiedzi

229,050 komentarzy

44,354 pasjonatów

Przeglądających: 229
Pasjonatów: 8 Gości: 221

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.

...