2009-06-21 13 views
1

Ich entwerfe ein Organigramm, das Modell ist fast fertig und vereinfacht ein wenig für Klarheit hier.DB Design Frage

OrgUnit (OrgUnitId, Name, ReportsToOrgUnitId, ...) 
OrgUnitJobs (OrgUnitJobId, OrgUnitId, JobName, ReportsToOrgUnitJobId, ... ,IsJobGroup) 
Employee (EmployeeId, ........) 
OrgUnitJobEmployee (OrgUnitJobId, EmployeeId, AssignedDate, .....,) 

so will ich jedes OrgUnit der ManagerEmployee weiß (sollte eine haben), und Mitarbeiter können mehr als einen Job haben, aber einer von ihnen hat die Hauptaufgabe sein, damit ich weiß, was seinen Manager und andere Sachen . Dies wird einen kleinen Arbeitsablauf hinter dem Scnese unterstützen, deshalb ist es kein sehr einfaches Organigrammmodell.

Also was würden Sie tun, würden Sie Eigenschaften wie (IsManager-Eigenschaft zum OrgUnitJobs-Modell) hinzufügen oder ManagerOrgUnitJobId zu OrgUnitModel hinzufügen. und warum?

In ähnlicher Weise würden Sie Mitarbeitern die IsPrimaryJob-Eigenschaft zum OrgUnitJobEmployee-Modell hinzufügen oder PrimaryJobId zum Employee Model hinzufügen.

+0

Kann nichts im Moment hinzufügen, aber ich mag das Aussehen dieses Schemas - das realistischste Organigrammschema, das ich bisher gesehen habe. – finnw

Antwort

0

Ich verstehe nicht gerade das Manager-Konzept. Ist ein Manager ein Angestellter oder eine Organisationseinheit? Abhängig von Ihrer Antwort hätte ich eine ManagerEmployeeId oder eine ManagerOrgUnitJobId Eigenschaft auf OrgUnit und/oder OrgUnitJobs.

Ich würde PrimaryJobId dem Mitarbeiter hinzufügen. Das garantiert, dass ein Mitarbeiter nur einen primären Job hat.

Also ich denke, in beiden Fällen würde ich eine XxxId-Eigenschaft gegenüber einer Booleschen IsXxx-Eigenschaft bevorzugen. Eine IsXxx-Eigenschaft öffnet die Tür für mehrere Manager oder mehrere primäre Jobs.

+0

Mehrere Manager passieren in der realen Welt, also ist es gut, dass das Schema dies zulässt. – finnw

+0

ManagerOrgUnitJob ist ein Job, der für diese OrgUnit genau wie alle anderen Jobs in dieser Organisationseinheit definiert ist, aber er ist eindeutig und sollte die Managerjobposition für diese OrgUnit anzeigen. Am Ende ist Manager ein Angestellter (diesen Job-Position ausfüllen). Ich möchte Management Job Position nicht anders als andere Jobs behandeln, damit ich eine Geschichte der Jobänderungen des Angestellten in der Organisation behalten kann. – hazimdikenli

1

Sie in Erwägung ziehen könnte zwei weitere Tabellen hinzugefügt (obwohl ich etwas fehlt möglicherweise):

OrgUnitManagers(OrgUnitJobID) 
OrgUnitJobEmployeeMain(OrgUnitJobEmployeeID) 

Einstellung können die referentielle Integrität zu gewährleisten, wenn ein OrgUnitJob oder OrgUnitJobEmployee der Datensatz gelöscht werden diese Tabellen werden automatisch aktualisiert (falls vorhanden auf Ihrer DB)

-ODER-

OrgUnitManager(OrgUnitJobID, OrgUnitId) 
OrgUnitJobEmployeeMain(EmployeeId, OrgUnitJobID) 

Kann referenten verwenden ial Integrität und jetzt Indizes, um die Eindeutigkeit zu gewährleisten, obwohl Theres jetzt Doppelarbeit im Schema

Ich bin ein wenig verwirrt, ob der Manager auf der OrgUnitJob-Ebene oder auf der OrgUnitJobEmployeeID-Ebene angegeben ist ?? Das obige nimmt seine an der OrgUnitJob, aber wenn es auf der Ebene der Mitarbeiter, ändern Sie OrgUnitManagers (OrgUnitJobID) zu OrgUnitManagers (OrgUnitJobEmployeeID)