2009-05-07 9 views
0

J'ai deux tables dans ma base de données:Structuration système de messagerie interne

  • table Company (ID, CompanyName, CompanyUsername, CompanyPassword)
  • table Employé (ID, CompanyID, nom, nom d'utilisateur, mot de passe)

en ce moment je suis la conception d'un système de messagerie interne pour lequel les employés peuvent écrire à l'autre, mais aussi écrire directement sur le compte de l'entreprise.

Ma table de courrier interne a ces domaines:

  • ID
  • FromID
  • Toid
  • message
  • ...

Maintenant, mon problème se produit, quand je remplir la table des messages avec des ID (De/To) Je n'ai aucune idée si le message est de La société ou l'employé comme ID peut exister dans les deux tableaux.

Que ma solution pourrait être?

Mise à jour

L'exemple ci-dessus est de simplifier ma question.

L'employé et tables société ne contient pas de nom d'utilisateur ou mot de passe, mais une référence à l'adhésion de ASP.NET uniqueidentifier pour gérer les connexions. Comme suggéré ci-dessous avec l'utilisation des interfaces utilisateur pour contrôler le et le destinataire, je vais avec l'interface utilisateur du contrôleur d'adhésion ASP.NET. Merci. :-)

Répondre

0

Utilisez un uniqueidentifier id dans les tableaux et les employés et la Société utiliser newid() comme valeur par défaut. Sinon, fusionnez les tables et ajoutez un champ pour indiquer si l'enregistrement est une société ou un employé.

+0

Oui, j'ai pensé à ça. Cela demandera beaucoup de travail, mais pourrait être la meilleure idée à long terme. Les tableaux n'ont tout simplement pas la même information. À l'heure actuelle, j'utilise les méthodes d'adhésion ASP.NET pour contrôler la connexion. Ils ont bien sûr une interface utilisateur. Je pourrais utiliser cela pour vérifier au lieu d'ID. – janhartmann

0

Vous pouvez utiliser deux clés étrangères, sur la société et l'un à l'employé et veiller à ce que seul est toujours défini.

+0

Merci pour la suggestion. – janhartmann

0

Ainsi, un email.ToID pourrait se référer à employee.ID ou company.ID, est-ce pas? Vous ne pouvez pas limiter de manière déclarative cet e-mail.ToID doit exister dans au moins un des champs (employee.ID ou company.ID). Peu de solutions:

  1. ID ont dans le tableau de courrier électronique (ToEmployeeId, ToCompanyId), et une contrainte de vérification qui limite que seul peut être spécifié sur un courrier électronique donné.
  2. Avoir des ID d'employé et de société dans le même espace d'id, par ex. leur Id est maîtrisé dans une sorte de table de contact, et puis company.Id et employee.Id tous les deux ont un FK faisant référence à Contact.Id. Je ne pense pas que cette solution soit très bonne car Contact est un super type super boiteux de ces autres tables.
  3. Avoir une table de contacts comme (ContactId, EmployeeId, CompanyId). Lorsqu'un message est envoyé à EmployeeId = X, vous recherchez une ligne Contact avec EmployeeId = X. Si ce n'est pas le cas, créez-le et utilisez le nouvel ID de contact. Idem pour Companyid.Cela vous permet de développer pour utiliser d'autres ensembles d'identifiants dans le futur ainsi
+0

Bonnes suggestions. – janhartmann

Questions connexes