Jaki jest najlepszy projekt tabeli bazy danych, która może być własnością dwóch różnych zasobów, a zatem potrzebuje dwóch różnych kluczy obcych?

Moja aplikacja ma ustawienia powiadomień dla użytkowników, którzy mogą należeć do grup. Administrator grupy może zdefiniować ustawienia dla całej grupy, dzięki czemu gdy dowolny użytkownik wykona akcję, administrator zostanie powiadomiony. Administrator może również zdefiniować ustawienia dla indywidualnego użytkownika, co zastąpi ustawienie grupy.

W tej chwili mam bazę danych z kolumnami:group_id, action1, action2, action3, .... Akcje są logiczne, które określają, czy administrator jest powiadamiany, gdy ta akcja jest wykonywana przez użytkownika w jego grupie.

Mogłem stworzyć oddzielną tabelę należącą do modelu User zamiast modelu Group, ale wydaje się nieskuteczna, aby przechowywać dokładnie te same dane w całkowicie oddzielnej tabeli, zachowując zmianęgroup_id douser_id.

Inną opcją jest dodanieuser_id do tabeli, którą już mam i zezwalam na wartości nullgroup_id. Określając ustawienia powiadomień dla użytkownika, aplikacja najpierw wybiera ustawienie na podstawie użytkownika i powraca do ustawienia, gdziegroup_id nie jest null. Wydaje się to nieefektywne, ponieważ w bazie danych będzie wiele wartości zerowych, ale z pewnością wymaga to mniej pracy z mojej strony.

Czy istnieje projekt tej sytuacji, który byłby bardziej wydajny niż dwa, które opisałem?

questionAnswers(2)

yourAnswerToTheQuestion