Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klucz obcy - pytanie
Amakesh
post 25.01.2018, 01:41:16
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 26.06.2014

Ostrzeżenie: (0%)
-----


Witam!
Załóżmy, że mamy dwie przykładowe tabele: Klient i Zamówienie. Tabela Klient ma pola: Id, Nazwisko, PESEL, Adres a tabela Zamówienie ma pola: Id, PESEL_klienta, Nazwa towaru, Cena, Metoda płatności. Pola Id są kluczami głównymi w obu tabelach. Czy w tym przypadku pole PESEL może być kluczem obcym w tabeli Zamówienie czy też klucz obcy w jednej tabeli musi koniecznie być kluczem głównym w innej?
Go to the top of the page
+Quote Post
trueblue
post 25.01.2018, 08:55:53
Post #2





Grupa: Zarejestrowani
Postów: 5 055
Pomógł: 1410
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


PESEL może być kluczem obcym, choć nie jest głównym w tabeli Klient.
Ale bardziej popularne jest łączenie relacją klucz główny-klucz obcy. W Twoim przypadku powinieneś założyć klucz obcy w tabeli Zamówienie o nazwie Id_Klient, a pozbyć się pola PESEL_klienta.
Go to the top of the page
+Quote Post
SmokAnalog
post 25.01.2018, 13:44:28
Post #3





Grupa: Zarejestrowani
Postów: 1 462
Pomógł: 235
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Dlaczego w zamówieniach przechowujesz PESEL klienta, a nie jego ID? Nie zgadzam się z @trueblue, że PESEL może być kluczem. Byłby to błąd projektu bazy danych, bo PESEL wbrew pozorom nie jest wartością stałą. Jeśli zdecydujesz się na zmianę płci, otrzymujesz nowy PESEL (serio) biggrin.gif A poważniej, PESEL jest prawie-dobrym kluczem, ale mimo wszystko jest to tylko porcja danych. W numerze PESEL mogą zajść błędy. Klucz z definicji powinien być kompletnie transparentny, dlatego lepiej byłoby zmienić strukturę bazy i używać ID klienta. Albo ewentualnie, jeśli PESEL rzeczywiście jest tą porcją danych, która decyduje u Ciebie o unikalności jednostki, jak na przykład naliczanie podatku dla danego numeru PESEL (w co bardzo wątpię), to wtedy lepiej byłoby utworzyć tabelę z PESEL-ami i przypisywać je do użytkowników, a dany PESEL linkować po ID (nie po PESEL-u) do czego trzeba.
Go to the top of the page
+Quote Post
pianta_d
post 3.03.2018, 11:24:14
Post #4





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

Ostrzeżenie: (0%)
-----


I do tego dochodzi jeszcze, tak głośno ostatnimi czasy głoszona, kwestia ochrony danych osobowych.
Nr PESEL jest zestawem danych, który jednoznacznie identyfikuje osobę, więc jej przechowywanie podlega pod ustawę o ODO, a od maja RODO, gdzie sankcje za przetwarzanie bez zgody lub nieodpowiednio chronione dane, są znacznie wyższe. Dlatego w tym przypadku masz już dwa argumenty za tym, żeby nie robić z nr PESEL klucza.
Go to the top of the page
+Quote Post
trueblue
post 3.03.2018, 11:35:31
Post #5





Grupa: Zarejestrowani
Postów: 5 055
Pomógł: 1410
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Klucz nie musi być widoczny dla użytkownika zewnętrznego.
Go to the top of the page
+Quote Post
pianta_d
post 3.03.2018, 17:23:44
Post #6





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

Ostrzeżenie: (0%)
-----


Tak, masz rację, ale samo posiadanie w bazie tych danych to już przetwarzanie, a o tym mówi ustawa.
Go to the top of the page
+Quote Post
trueblue
post 3.03.2018, 17:31:30
Post #7





Grupa: Zarejestrowani
Postów: 5 055
Pomógł: 1410
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Cytat(pianta_d @ 3.03.2018, 17:23:44 ) *
Tak, masz rację, ale samo posiadanie w bazie tych danych to już przetwarzanie, a o tym mówi ustawa.

Co nie ma związku z tym, czy pole jest kluczem czy nie.
Go to the top of the page
+Quote Post
pianta_d
post 3.03.2018, 18:27:30
Post #8





Grupa: Zarejestrowani
Postów: 176
Pomógł: 18
Dołączył: 5.01.2007

Ostrzeżenie: (0%)
-----


Absolutnie masz rację, dyskusja czysto akademicka.
Pozdrawiam
Go to the top of the page
+Quote Post
Pyton_000
post 4.03.2018, 08:49:59
Post #9





Grupa: Zarejestrowani
Postów: 7 379
Pomógł: 1304
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Ja nie widzę przeciwskazania żeby PESEL był FK.

Co do argumentu że PESEL może się zmienić to wtedy jest nowy użytkownik z nowym numerem.

Co do tego że FK powinien mapować na PK... dobrze by było ale nie musi, choć to jest dublowanie informacji, poza tym w zależności od wielkości bazy PESEL przez dłuugi czas może być dużo cięższym indeksem (zajmoać więcej miejsca) niż PK.

Reasumując, Może być.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 22.06.2018 - 19:28