Id w tabeli - jak poprawnie przechowywać dane

0

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?

0

Klucze obce służą do zapewnienia integralności danych wewnątrz bazy. Powinny być one tworzone sztucznie podczas tworzenia rekordów, a nie być danymi pochodzącymi z zewnątrz bazy takimi jak np. numery pesel czy id odpowiedzi na jakiejś stronie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1