проблема в представлении представления при удалении внешнего ключа? - PullRequest
1 голос
/ 14 сентября 2011

У меня есть ученический стол и учебный стол с PK учебного стола в качестве внешнего ключа ученического стола.Однако, когда образование удалено, ученик больше не появляется в представлении.Как мне решить эту проблему?

Ответы [ 4 ]

1 голос
/ 14 сентября 2011

Исходя из предоставленной вами информации, я предполагаю, что вы обеспечили ссылочную целостность в своей базе данных. Это означает, что при удалении строки в образовании также были удалены связанные с ней учащиеся.

1 голос
/ 14 сентября 2011

Я считаю, что рекомендуется никогда не удалять данные из таблиц, поскольку от них зависят другие поля.Вместо этого у вас должно быть логическое значение в таблице, которое называется IsDeleted, и просто измените его на True, если вы хотите «удалить» его, а когда вы извлекаете данные, убедитесь, что вы отфильтровываете все, для чего установлен IsDeleted.на «True»

1 голос
/ 14 сентября 2011

Исходя из того, что вы спрашиваете, я думаю, вам следует сначала переосмыслить структуру вашей базы данных.

Ответьте на следующие вопросы:

  1. Имеет ли смысл иметь student с несуществующим education?

    Это было бы в случае, если вы удалили education из вашей таблицы Educations, но в вашей базе данных остались студенты с FK для этой строки education. Кажется, это то, о чем вы просите, но это не имеет особого смысла, поскольку не обеспечивает целостность данных.

  2. Разрешено ли вам удалять education, если студенты зачислены в указанный education?

    Если это нельзя разрешить, вам нужно будет только отключить каскадное удаление в отношениях 1 ко многим, и ваша проблема будет решена.

  3. Если удалить eduction, должны ли все учащиеся, назначенные для данного образования, оставаться в базе данных?

    Это то, что вы хотите, но со структурой вашей базы данных это не так просто достичь.

Более простое решение?

Можно было бы создать 3 таблицы вместо 2:

  1. 1038 * Образования *
  2. Студенты
  3. StudentsEducationAssignments

В 1 вы храните все, что связано ТОЛЬКО с вашими education сущностями. В 2 только то, что имеет отношение к вашим student сущностям (обратите внимание, что какой тип education они выбирают, это не то, что ТОЛЬКО описывает student). В 3 вы храните, какие ученики назначены для каких образований.

Таким образом, если вы удалите education, назначенные ему учащиеся не будут удалены, только информация, которая связывает учащихся с этим конкретным education. Таким образом вы сохраняете целостность базы данных проще.

Надеюсь, это поможет.

0 голосов
/ 14 сентября 2011

Может быть, ВНЕШНЕЕ СОЕДИНЕНИЕ вместо ВНУТРЕННЕГО СОЕДИНЕНИЯ в вашем представлении?

Если вы покажете нам определение представления, мы могли бы помочь больше, без него мы просто догадываемся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...