Model bazy danych - transakcje

0

Witam, mam pytanie. Czy da się wykonać relację między tabelami operując tylko na kluczach podstawowych a raczej kluczach złożonych? pytam, bo muszę wykonać model bazy transakcji, jednak użyłem klucze obce i wykładowca napisał, że nie mogą być żadne klucze obce.

0

Może przez normalizacje? Czyli utworzyć tabele pośrednią zawierającą tylko odniesienia...

0

Raczej nie chodzi o normalizację. Mogę wkleić to co mi napisał.

0

To dawaj

0

Może mu chodziło o to żeby zastosować klucze "biznesowe" - czyli np. nr faktury + id klienta.
Albo o to żeby nie używać foreign key w definicji bazy...
A może o to że zrobiłeś relację jeden-do-wielu zamiast wiele-do-wielu.
...

0

O to treść co mi napisał:
Jedna strona transakcji jest klient (tabela klient, w której są dane
klienta i żadne klucze obce!!!).

Nie wiem co jest drugą stroną transakcji - ???

Transakcja to realizacja zamówienia czyli główna tabela będzie tabela
Zamowienia, w której jest zawarty nagłówek zamówienia: numer zamówienia,
połączenie z klientem, data zamówienia, wartość zamówienia, itp.

Ale zamówienie jest wielopozycyjne czyli (tak jak na zajęciach
pokazywałem) istnieje druga tabela np. Pozycje_zamówienia, która jest w
relacji z tabelą zamówienia i z drugą stroną transakcji (np. produkty)

Mowa była o kluczach złożonych, więc zrobiłem tak:

create table Klient(
ID_Klienta  integer not null,
NrZamowienia integer not null,
Imie varchar(25) null,
Nazwisko varchar(40) null,
Adress varchar(40) null,
Miasto varchar(50) null,
KodPocztowy varchar(10) null,
Telefon varchar(20) null,
constraint ID_Klienta
primary key (NrZamowienia)
);

create table Zamowienia (
ID_Klienta  integer  not null,
NrZamowienia integer not null,
PozycjaZam integer not null,
StatusZam varchar(6) null,
NazwaProjektu varchar(100) null,
DataZam date,
CenaProjektu varchar(20) null,
constraint ID_Klienta
primary key (NrZamowienia, PozycjaZam)
);

Tylko , że tu nagłówkiem jest ID_Klienta ale jak połączyć tabele nie używając kluczy obcych?

0

Chodzi o to że w tabeli Klient nie powinno być pola NrZamowienia, a primary key powinno być ustawione na ID_Klienta.

...chyba że Klient.NrZamowienia to nie relacja tylko generator i wtedy trzeba tylko zmienić primary key a prowadzącemu wyjaśnić że pole Klient.NrZamowienia to nr ostatniego lub następnego zamówienia dla danego klienta. W takiej sytuacji trzeba też zmienić PK w zamówieniach:

primary key (ID_Klienta, NrZamowienia, PozycjaZam)

0

A jak połączyć te tabele bez kluczy obcych? Wykładowcy chodzi aby były dwie strony Klient/Odbiorca gdzie klient składa zamówienie a odbiorca odbiera i realizuje.

0

ja bym zrobił klienta i odbiorcę w jednej tabeli:

Klient:
ID - primary key
Nazwa

Zamówienia:
ID - primary key
Data
Numer
IDZamawiajacego /w relacji z ID tabeli klient/
IDOdbiorcy /w realacji z ID tabeli klient/

ZamówieniaDetale:
ID - primary key
IDZamowienia /w relacji z ID tabeli zamówienia/
LP
Nazwa
Cena
ilosc

0

W jednej tabeli ale mimo tego trzeba użyć kluczy obcych a wykładowca nie chce aby uzywać kluczy obcych, jedynie chce model zrobiony w dowolnym programie np w word i zapisac jako jpeg i przeslać na mail. Czyli pokazac aby zaakceptował/

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