Почему связи в таблице функционируют некорректно?

Как настроить связи между таблицами в базе данных, чтобы пользователи могли создавать и лайкать участки кода, сохраняемые в бд? Как можно избежать ошибки, которую ты описал и которая связана с циклическими или множественными путями каскадного удаления? Вот мой контекст базы данных и модели.
  • 17 июня 2024 г. 13:31
Ответы на вопрос 2
Для правильного функционирования связей между таблицами в базе данных, необходимо корректно определить типы связей и правила их обновления и удаления. 

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

1. Таблица "Пользователи" с полями:
   - user_id (PRIMARY KEY)
   - username
   - email
   - password

2. Таблица "Участки кода" с полями:
   - code_id (PRIMARY KEY)
   - user_id (FOREIGN KEY от таблицы "Пользователи")
   - code_text

3. Таблица "Лайки" с полями:
   - like_id (PRIMARY KEY)
   - user_id (FOREIGN KEY от таблицы "Пользователи")
   - code_id (FOREIGN KEY от таблицы "Участки кода")

Таким образом, у вас будет связь между пользователем, участком кода и лайками. Чтобы избежать ошибок при удалении, примените правила обновления и удаления:

- Для связи между таблицами "Пользователи" и "Участки кода" используйте тип связи "Один ко многим". При удалении пользователя, участки кода останутся в базе данных.
- Для связи между таблицами "Пользователи" и "Лайки", также используйте тип связи "Один ко многим". При удалении пользователя, его лайки также останутся в базе данных.
- Для связи между таблицами "Участки кода" и "Лайки", используйте тип связи "Многие ко многим". При удалении участка кода, удаляются только связанные с ним лайки, но не пользователи.

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

Во первых, если вам нужно установить связь между этим
public List<CodeSnippet> LikedCodeSnippets { get; set; } = new List<CodeSnippet>();


И этим
public List<User> UsersWhoLiked { get; set; } = new List<User>();


Вам нужна дополнительная таблица. Почему? Потому что тут связь много-ко-многим . Вот она:
public sealed class UserCodes
{
    public int UserId { get; set; }
    public User User { get; set; }

    public int CodeId { get; set; }
    public CodeSnippet Code { get; set; }
}


Через эту таблицу далее конфигурируете связь много-ко-многим

Что значит эта запись?
public User User { get; set; } = null!;

В чём смысл говорить, что она null и ставить ! как обозначение того, что она not null ?
Похожие вопросы