Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak testować tabele powiązane z kluczami obcymi?

Jak wspomniano w komentarzach, musisz najpierw usunąć wszystkie tabele z ograniczeniami FK do innych tabel, a następnie upuścić tabele, z którymi są połączone.

Przykład:

User
  id: 1
  name: Mike

Address 
  id: 1
  user_id: 1 (FK constraint to User.id table.column)
  address_1: 555 Main Street

Ta konfiguracja to relacja 1:1 (więcej o normalizacji danych ), gdzie jeden wiersz użytkownika może odwoływać się do jednego wiersza adresu, a ponieważ wiersz adresu jest zależny od istnienia wiersza użytkownika, jeśli spróbujesz usunąć wiersz użytkownika, zobaczysz wymienione błędy.

Ale jeśli najpierw upuścisz tabelę Address, wszystko działa zgodnie z oczekiwaniami, ponieważ tabela User nie jest FK do żadnej innej tabeli.

Zapewnienie integralności referencyjnej w schemacie zapewnia, że ​​nie otrzymasz osieroconych wierszy, które będą przenikać przez całą aplikację opartą na danych.

Możesz również wydać następujące polecenia:

SET foreign_key_checks = 0;
# Do Stuff
SET foreign_key_checks = 1;

Ale zdecydowanie odradzałbym to, ponieważ możesz złamać referencyjną integralność swoich danych i skończyć w prawdziwym bałaganie. Widziałem, jak ktoś robi to w środowisku korporacyjnym i posprzątanie tego zajęło mu kilka tygodni. Jeśli jednak robisz to WYŁĄCZNIE do celów testowych; na przykład pisanie testów jednostkowych lub po prostu uczenie się, a nie chcesz za każdym razem porzucać tabel, możesz to zrobić:

# Because we remove the foreign key check, we can truncate in any order
SET foreign_key_checks = 0;
TRUNCATE TABLE user;
TRUNCATE TABLE address;
SET foreign_key_checks = 1;

Właściwy projekt schematu z wykorzystaniem ograniczeń kluczy obcych prowadzi do zbudowania dobrej podstawy dla dowolnej aplikacji opartej na danych. Zajmie trochę czasu, aby się zorientować, kiedy używać i jak konstruować ograniczenia klucza obcego, ale z czasem zaczniesz rozumieć. Dobrym sposobem na rozpoczęcie jest pobranie projektu open source, takiego jak magento , wordpress lub vbulletin i spójrz na ich schematy. Możesz nawet przeprowadzić introspekcję tych schematów za pomocą MySQL workbench i zobacz ich Diagramy relacji encji (ERD), które wizualnie zademonstrują powiązania między tabelami.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zwrócić 0 z bazy danych MySQL, gdy termin w klauzuli Where nie znajduje się w bazie danych?

  2. Ustaw pole Auto Increment od 1000 w laravel migracji 5.1

  3. Jak przetworzyć datę 0000-00-00 w zapytaniu jdbc MySQL?

  4. enum('tak', 'no') vs tinyint -- którego użyć?

  5. Jak poprawić porządek według wydajności za pomocą złączeń w mysql