![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 45 Pomógł: 0 Dołączył: 15.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Małe pytanie - jeżeli dla klucza podstawowego z numerem użytkownika ustawię opcję 'Auto Incremental' to czy:
1. Numeracja będzie się zmieniać automatycznie przy różnych operacjach (np. usunięciu użytkownika), tak, że wartości kolejnych rekordów będą zawsze tworzyć ciąg liczb naturalnych (1,2,3,...)? 2. Czy przy takich zmianach klucze obce w innych tabelach również będą się odpowiednio zmieniać? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 471 Pomógł: 89 Dołączył: 29.07.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
1. Numeracja będzie się zmieniać automatycznie przy różnych operacjach (np. usunięciu użytkownika), tak, że wartości kolejnych rekordów będą zawsze tworzyć ciąg liczb naturalnych (1,2,3,...)? nie 2. Czy przy takich zmianach klucze obce w innych tabelach również będą się odpowiednio zmieniać? to zalezy http://dev.mysql.com/doc/refman/5.1/en/inn...onstraints.html on delete, on update |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Stosując on delete, czy on update, można sobie samemu krzywdy narobić... Także nie polecam.
-------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 45 Pomógł: 0 Dołączył: 15.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Poczytałem trochę, podumałem, ale dalej nie jestem w stanie niczego wymyślić. Poniżej treść mojego posta z innego forum:
OK, narazie jest fajnie, jednak wszędzie temat jest opisany dosyć ogólnikowo, w związku z czym proszę o pomoc. Udało mi się dowiedzieć, że chodzi tutaj o kod ON DELETE i ON ACTION w kodzie SQL. Chciałbym się dowiedzieć, jaki będzie prawidłowy kod SQL tworzący tabele bazy danych w moim przypadku. Chciałbym, aby w sytuacji, kiedy zostanie usunięty lub zmieniony numer ID użytkownika, klucz obcy w tabeli str_messages_receivers został usunięty lub nadpisany. Fragment diagramu EER (klucze podstawowe to klucze , a obce to czerwone romby): ![]() Kod dla tabeli str_users:
Kod dla tabeli str_message_receivers:
Koniec posta. Chciałbym się również zapytać, czy można jakoś te więzy integralności ustawić w MySQL Workbench, wtedy mógłbym sobie sam popróbować. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 471 Pomógł: 89 Dołączył: 29.07.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
ON DELETE CASCADE
ON UPDATE CASDADE Cytat Chciałbym się również zapytać, czy można jakoś te więzy integralności ustawić w MySQL Workbench, wtedy mógłbym sobie sam popróbować. tak mozna Stosując on delete, czy on update, można sobie samemu krzywdy narobić... Także nie polecam. dlaczego ? ja polecam ![]() ![]() niezla krzywde mozna sobie tez zrobic trzymajac niespojna baze z nieaktualnymi kluczami po to sa wiezy integralnosci zeby baza zachowala integralnosc, jesli masz uprawnienia ktore pozwalaja na np. kasowanie/updatowanie rekordow to musisz liczyc sie z tym, ze rekordy zostana skasowane/updatowane tak zeby baza zachowala integralnosc :] inna sprawa, ze warto sie dobrze zastanowic czy to czego potrzebujemy to na pewno jest delete rekordow, a nie zmiana ich(na przyklad) statusu na nieaktywny Ten post edytował yevaud 5.09.2010, 01:13:33 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Prosty przykład dlaczego nie:
Sklep, produkty, faktury. Mamy jakis produkt na stanie, dodajemy go do faktury, zostal zdjety z stanu ma teraz ilosc sztuk magazynowa 0, uwazamy ze juz jest nam nie potrzebny, wiec usuwamy go. BUM! Z faktury znika nam produkt! Tadam! A później urzad skarbowy nas za jaja powiesi. -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 471 Pomógł: 89 Dołączył: 29.07.2008 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
ok, ale przy takiej konkstrukcji bazy jaka mysle narzuca Twoj scenariusz, po zrobieniu delete cascade nie tyle zniklby produkt z faktur co zniklyby faktury ktore ten produkt mialy
![]() Kazdy kto kasuje rekordy w ten sposob o ktorym wspomniales zasluguje na pregierz i cascade niewiele tu zmienia, set null mogloby cos zmienic ewentualnie tzn. sprawic ze w pewnych warunkach byloby to dopuszczalne Program do faktur albo powinien byc zlaczany wiele-do-wielu z magazynem, wtedy kasujesz rekordy z tabeli zlaczajacej, a za skasowanie czegos z tabeli produktow masz dyscyplinarne zwolnienie z pracy(wtedy bez cascade uszkadzalbys wszystkie faktury, z cascade kasowalbys produkt z wszystkich faktur - same faktury dalej by istnialy i bylyby formalnie poprawne) ![]() ![]() ![]() Ten post edytował yevaud 5.09.2010, 12:10:04 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Gdyby nie było on delete cascade, baza by Ci nie pozowoliła usunąć produktu, ponieważ inne pola (klucze obce) pokazywałyby na wartość w tabeli której nie ma, integralność kluczy jest ważnym elementem i Twoją obroną. Także czasami warto się zastanowić nad tym co tak na prawdę robimy.
-------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 45 Pomógł: 0 Dołączył: 15.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
I rozumiem, że to w tabeli str_message_receivers w tym przypadku?
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 556 Pomógł: 6314 Dołączył: 27.12.2004 ![]() |
Cytat Stosując on delete, czy on update, można sobie samemu krzywdy narobić... Także nie polecam. Cytat Mamy jakis produkt na stanie, dodajemy go do faktury, zostal zdjety z stanu ma teraz ilosc sztuk magazynowa 0, uwazamy ze juz jest nam nie potrzebny, wiec usuwamy go. BUM! Cojak, jeśli tak używasz relacji to nic dziwnego ze ich nie polecasz Z faktury znika nam produkt! Tadam! A później urzad skarbowy nas za jaja powiesi. ![]() W tym przypadku na tabele faktura_produkt nalezy zalozyc klucz obcy na produkt z ondelete RESTRICT. Wowczas baza nie pozwoli na usunięcie produktu, który jest przypisany do jakiejs faktury. Relacje to bardzo fajny mechanizm i jak najbardziej nalezy go stosować. Takie rozwiązanie jest tym bardziej wskazane, że daje nam zabezpieczenie, gdy jakiś "genialny" admin ominie aplikacje i jej logikę i zacznie grzebać bezpośrednio w bazie. Wówczas również gdy będzie chciał bezpośrednio w bazie usunąć produkt, to baza mu na to nie pozwoli, jeśli produkt będzie przypisany do jakiejś faktury -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 7.05.2025 - 05:49 |