Ich denke über Berechtigungen System für mein Projekt und ich kann keine Entscheidung treffen, wie mein Berechtigungssystem zu organisieren. In kurzen abstrakten Form würde ich meine Frage wie beschreiben:
Sollte ich gemeinsame Entitäten (Zeilen) erstellen und Berechtigungen anwenden oder separate Entity (Zeile) für jeden Benutzer kopieren erstellen?Ist diese Datenbank Design oder Autorisierung/Berechtigungen Zuständigkeit
Meine Situation: Ich habe 2 Einheiten
Company
{
[PK]
Id,
Name,
Contacts,
OwnerUser
},
Contact
{
[PK]
Phone,
ContactPerson
}
die Beziehung many-to-many haben. Benutzer dürfen die Entität des Unternehmens ändern, die sie selbst erstellt haben.
Mein Problem: Contact-Entity (Zeile) kann zwischen Unternehmen geteilt werden, die verschiedenen Benutzern gehören, und nehmen an, dass beide Benutzer Contact.ContactPerson mit anderem Wert bearbeiten möchten (beispielsweise ein Benutzer behauptet, dass die Telefonnummer John gehört und andere, dass es Toms Nummer ist), kann diese Situation gelöst werden, wenn ich separate Kopie des Kontakts für jedes Unternehmen (und damit Benutzer) erstellen, aber meine Geschäftsregeln erlauben keine doppelten Kontakte mit derselben Telefonnummer und dort andere Kontakteigenschaften das muss (nach meinen Geschäftsregeln) neben der Telefonnummer geteilt werden.
Wie kann diese Situation behoben werden?
Das Telefon ist eindeutig und wird geteilt, da es Eigenschaften enthält, die von allen Firmen mit dieser Telefonnummer geteilt werden müssen. Andernfalls müssen wir, wenn sich eine Phone-Eigenschaft ändert (etwa ein Flag), alle Phone-Instanzen in der DB suchen und diese flag \ property aktualisieren. –
In Ordnung; In diesem Fall haben Sie recht, wenn Sie sagen, dass Sie ContactPerson und die Telefonnummer trennen sollten - sie sind separate Entitäten. Ihre Anforderung, dass Kontakte keine doppelten Telefonnummern haben können, ist in diesem Fall jedoch nicht sinnvoll, da dies der Fremdschlüssel ist, der mehrere Kontakte mit einer Telefonnummer verknüpft. – kander