Когда одна таблица SQL связана с другой таблицей, невозможно ли удалить данные из базы данных? - PullRequest
0 голосов
/ 17 мая 2018

Есть три таблицы, связанные друг с другом, как на диаграмме.Diagram Этот Youtuber использует столбец IsDeleted = 0 или IsDeleted = 1, чтобы указать, удалены или нет данные в таблице.

Когда одна таблица SQL связана с другой таблицей,невозможно ли удалить данные из базы данных?Если это невозможно, то я думаю, что это действительно плохо.Нет ли обходных путей для полного удаления данных?

Также, возможно, Facebook также делает что-то вроде IsDeleted = 1, и они не позволяют нам видеть наши собственные данные, когда мы «удаляем» их, в то время как они все еще могут получить доступ к нашим прошлым интересам.Как вы думаете?

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Четко определенное, статичное и структурированное расположение данных - одна из самых важных вещей в реляционных базах данных.В таблицах, которые вы показываете, сотрудник принадлежит к отделу.Теперь, если вы удалите отдел, у вас будет неработающая запись в таблице Employee.Вот почему SQL не позволит вам удалить отдел.

Чтобы решить эту проблему, вам нужно будет либо прекратить удаление отдела с сообщением типа «В этом отделе есть пользователи. Невозможно удалить».или удалите идентификатор отдела (установите его на ноль) из записей сотрудников, которые принадлежат этому отделу.

В некоторых ситуациях возникают бизнес-потребности, когда данные должны храниться по разным причинам.В этих случаях на помощь приходят IsActive подобные флаги.Записи могут быть отфильтрованы с использованием их и, таким образом, скрыты на экране.Обычно это называется мягким удалением.

0 голосов
/ 17 мая 2018

На самом деле, я думаю, что это хорошая практика - делать мягкое удаление, а не полное удаление, потому что вы можете безопасно восстановить данные позже.На ваш вопрос вы можете удалить данные родительской таблицы, только если данных дочерней таблицы больше нет.В противном случае вы получите эту ошибку:

the delete statement conflicted with the reference constraint ...

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

ID  DepartmentName
1      HR
2      marketing

, а это таблица вашего сотрудника:

ID DepartmentId  Name      Address
1     1         Name1      address1
2     1         Name2      address2
3     1         Name3      address3

Теперь, если вы хотите удалить отдел маркетинга из таблицы Департамента, вы можете легко удалить его инет ошибкиНо теперь, если вы попытаетесь удалить отдел кадров, вы получите ошибку, как упоминалось выше, потому что идентификатор отдела кадров (т. Е. 1) уже связан с другой таблицей, называемой таблицей сотрудников.Поэтому, если вы все равно хотите удалить отдел кадров, вы должны сначала удалить все записи из таблицы сотрудников с DepartmentId = 1.в противном случае вы можете использовать этот подход в качестве упомянутого вами ютубера.Надеюсь, это поможет!

0 голосов
/ 17 мая 2018

Нет, данные всегда можно удалить из базы данных.Могут существовать ограничения на то, что должно произойти до того, как данные будут удалены (разрешения, ограничения внешнего ключа и т. Д.), Но в конечном итоге они могут быть удалены.

Столбец, такой как этот, часто используется для ведения истории данных вприложение.Ссылки, на которые вы ссылаетесь, называются отношениями внешнего ключа и используются для обеспечения целостности реляционных данных.Столбец IsDeleted в наборе результатов не имеет ничего общего с FK.

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

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