Piszę program do automatyzacji pracy na forum internetowym. Jedną z opcji jaką chcę zrobić jest dodawanie postów z poziomu aplikacji. Co chciałbym zrobić, to móc zaplanować te dodanie postów. Np. najwcześniej w następny wtorek ma dodać odpowiedź w danym temacie.
Rzecz jasna informacje o planowaniu chciałbym zawrzeć w bazie danych. Początkowo tabela Answers
wyglądałaby tak:
public class Answer {
public int Id {get; set;}
public int? OnSiteId {get; set;}
public string Message {get; set;}
public DateTime AddAt {get; set;}
public bool IsAdded {get; set;}
}
public class User {
public int Id {get; set;}
public ICollection<Answer> Answers {get; set;}
public User() {
Answers = new List<Answer>();
}
}
public class UserAnswers {
public int Id {get; set;}
public int UserId { get; set; }
[ForeignKey("UserId")]
public User User { get; set; }
public int AnswerOnSiteId { get; set; }
[ForeignKey("AnswerOnSiteId")]
public Answer Answer { get; set; }
}
Powodem dla którego Answer
posiada Id
oraz OnSiteId
jest to, że ta tabela odpowiada za dodane odpowiedzi i zaplanowane odpowiedzi.
Na początku planuję dodanie odpowiedzi, więc do Answers
dodaję nowy rekord . Oczywiście nie znam teraz OnSiteId
mojej odpowiedzi, więc nie mogę uzupełnić tego pola. W momencie kiedy dodam odpowiedź zmodyfikuję ten rekord o owe Id. Oczywiście w tym przypadku UserAnswers.AnswerOnSiteId
jest powiązane kluczem z Answer.OnSiteId
.
Drugą opcją mogłoby być dodanie tabeli AnswersToAdd
i to byłaby tabela do planowania. Nie posiadałaby ona kolumny OnSiteId
. Dopiero po dodaniu odpowiedzi usuwałbym rekord z tej tabeli i dodawał do Answers
oczywiście już z OnSiteId
. Tu zastanawiam się, czy w ogóle jest potrzebny OnSiteId
. Może powinienem zostać przy samym Id
, które sam ustawiałbym podając tam właśnie Id
ze strony? Co myślicie, które rozwiązanie będzie najlepsze?