2017-06-06 1 views
0

Allgemeine Frage hier (genauer für Django/Python), wenn ein Modell wie ein Company zum Beispiel erstellt wird und mehrere Benutzer (Mitarbeiter) verwandt werden Ein solches Modell, wie sollten die verschiedenen Modelle zusammenhängen?Django: Um Benutzermodell oder Profilmodell für verwandte Modelle zu verwenden

I.e. Ein Benutzerprofil wird über ein OneToOneField mit einem Benutzerobjekt verknüpft. Aber sollte das Company-Objekt durch einen ForeignKey mit dem User-Objekt oder dem UserProfile-Objekt verknüpft werden, und warum ist das der geeignete Weg?

So

class UserProfile(models.Model): # For the Company Employees 
    user = models.OneToOneField(UserModel, related_name='employeeprofilemodel', on_delete=models.CASCADE, blank=True, 
    null=True) 
    ... 
    company_rel = models.ForeignKey(CompanyModel, related_name='companyrel', null=True) 

oder

class User(AbstractBaseUser): # For all Users 
    ... 
    company_rel = models.ForeignKey(CompanyModel, related_name='companyrel', null=True) 

Antwort

1

Dies ist eher eine Meinung anhand Frage, anstatt Sache. Ich würde den früheren Weg empfehlen, der eine One-to-One-Beziehung mit der AUTH_USER_MODEL erstellt. Anschließend können Sie die mitarbeiterbezogenen Daten in der Benutzerprofiltabelle speichern, die über eine ForeignKey-Beziehung mit der Unternehmenstabelle verknüpft werden kann. Der Vorteil eines solchen Datenbankschemas ist, dass Sie die Benutzertabelle (die AUTH_USER_MODEL ist) in Zukunft ändern können (falls erforderlich, natürlich), ohne die sensiblen Mitarbeiterdetails zu beeinflussen. Die User-Tabelle lebt unabhängig von der Company-Tabelle in der Datenbank und könnte für die Authorization verwendet werden. Es werden auch weniger Daten während der Datenbankabfragen übertragen und implizit kann eine kleine Optimierungsebene erreicht werden. Ich nehme an, dass dies geeigneter ist als das Modell auth.User.

Der letztere Weg könnte die oben genannten sensiblen Daten jedes Mal kompromittieren, wenn ein Datenbank-Refactoring jemals benötigt wird. Außerdem wären die Abfragen viel schwerer, wenn die Benutzermodelle mehr Daten haben als für die Benutzer erforderlich sind. Bei der Verarbeitung der Datenbankabfragen mit Benutzertabellen ist möglicherweise zusätzliche Sorgfalt für die Optimierung erforderlich.

Verwandte Themen