1

Bonjour J'ai la relation MySQL suivante,relations mysql, les rendre facultatives?

enter image description here

Comme vous pouvez le voir le tableau des sociétés a une relation 1: n Withe la table des membres. Cependant, cela semble implicite, ce qui signifie que lorsque j'essaie de sauvegarder un membre dans ma base de données, il doit être associé à une société, ou bien il ne se produit pas d'insertion.

Fondamentalement, l'architecture de notre processus d'inscription des utilisateurs est que vous pouvez être un individu ou signer en tant qu'entreprise. Comment puis-je faire en sorte que la conception de ma base de données reflète cela? La relation entre les deux tables n'est donc pas indispensable.

+0

Pourriez-vous juste rendre 'companies_id' nullable, et' LEFT JOIN' dans la table 'companies' lorsque vous devez tester si elles appartiennent à une entreprise? – halfer

Répondre

0

Je pense qu'il existe une contradiction entre votre schéma et le domaine métier réel. Si certains utilisateurs ne sont PAS associés à une entreprise, il existe une relation 0: n et non une relation 1: n.

En pratique, j'ai vu plusieurs façons de modéliser cela. Le plus simple, bien sûr, n'est pas de créer la relation de clé étrangère - et c'est ce que le domaine des affaires semble suggérer (les utilisateurs individuels ne sont pas associés aux entreprises). S'il existe une différence substantielle entre les clients «professionnels» et les clients «individuels», vous pouvez factoriser les colonnes distinctes en tables distinctes. Vous pouvez donc avoir «users» et «business_users» là où résident les informations commerciales (inc. le lien vers companies_id), et "individual_users", où les données individuelles vivent.

2

Ce n'est pas une conception géniale.

Vous devriez lire sur le Party Model, et Table Inheritance pour voir un design construit pour durer. Un squelette:

PARTY 
id 

ORGANIZATION : PARTY 
name 
doing_business_as 

INDIVIDUAL : PARTY 
first_name 
last_name 

PARTY_RELATIONSHIP 
from_party_id references party(id) 
to_party_id references party(id) 
from_date 
to_date 

ORGANIZATION_CONTACT_RELATIONSHIP : PARTY_RELATIONSHIP 
Questions connexes