Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да тестваме таблици, свързани с външни ключове?

Както беше споменато в коментарите, първо трябва да махнете всички таблици с FK ограничения към други таблици, след това можете да махнете таблиците, към които са свързани.

Пример:

User
  id: 1
  name: Mike

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

Тази настройка е връзка 1:1 (повече за нормализирането на данните ), където един потребителски ред може да препраща към един адресен ред и тъй като адресният ред зависи от съществуването на потребителския ред, ако се опитате да премахнете потребителския ред, ще видите грешките, които споменахте.

Но ако първо пуснете таблицата с адреси, всичко работи както се очаква, тъй като таблицата с потребители не е FK към никоя друга таблица.

Осигуряване на препратка интегритет в рамките на вашата схема гарантира, че няма да се окажете с осиротели редове, които ще проникнат в цялото ви приложение, управлявано от данни.

Можете също да издадете следните команди:

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

Но силно бих посъветвал това да не се прави, тъй като бихте могли да нарушите референтната цялост на вашите данни и да се окажете в истинска бъркотия. Виждал съм някой да прави това в корпоративна среда и му отне седмици, за да го почисти. Ако обаче правите това СТРОГО за целите на тестването; като писане на единични тестове или просто учене и не искате да изпускате таблиците всеки път, можете да направите това:

# 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;

Правилното проектиране на схема, използващо ограничения на външния ключ, е по пътя на изграждането на добра основа за всяко приложение, управлявано от данни. Ще ви отнеме време, за да разберете кога да използвате и как да конструирате ограничения на външния ключ, но с течение на времето ще започнете да разбирате. Добър начин да започнете е да изтеглите проект с отворен код като magento , wordpress , или vbulletin и разгледайте техните схеми. Можете дори да интроспектирате тези схеми, като използвате MySQL workbench и вижте техните диаграми за взаимоотношения на обекта (ERDs), които визуално ще демонстрират връзки между таблици.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql заявка за търсене и замяна на текст във всички редове

  2. колко безопасни са изготвените изявления за ЗНП

  3. Как да дублирате база данни с помощта на phpMyAdmin

  4. Spring Boot + Spring Data JPA заявка от типа java.util.Date, използвайки само месеца

  5. Извличане на MySQL полета от ред в PHP променливи и масив