2017-05-11 1 views
0

Dans mon application, j'ai une entité, table, appelée actions avec des propriétés variées. Pour clarifier le cas, ce qui suit est la table Structure actions:Normalisation de base de données d'une entité avec des propriétés variées

    id
  1. ,
  2. status_id (non nulle),
  3. SECTION_ID (non nulle),
  4. job_id (non nulle)
  5. equipment_id (null),
  6. cause_id (null),
  7. solution_id (null),
  8. created_at,
  9. closed_at,
  10. ACTION_TYPE (non null) char (3)

Si tous les champs suffixés avec _id sont les clés étrangères et la action_type est très liste limitée et définie des types d'actions, donc je l'ai défini dans un fichier de configuration, c'est-à-dire qu'il n'y a pas d'entité de base de données pour action_type.

Ma question est plus générale que celle-ci: Can a foreign key be NULL and/or duplicate? où je pose des questions sur le principe de normalisation.

Dans mon cas, certains types d'action n'a pas besoin, par exemple, pour equipment_id, où d'autres ont besoin equipment_id mais pas besoin à la fois cause_id et solution_id, etc

Dans ma conception de base de données, la table actions ressemble à beaucoup à Beaucoup de tables de conjugaison.

La conception ci-dessus permet, facilement, d'obtenir de nombreuses données statistiques sur les sections et les travaux sans avoir besoin d'effectuer des requêtes de jointure complexes.

Ma question est: Est-ce que ma normalisation et ma conception sont correctes?

+0

Que voulez-vous dire par "normalisation"? Ce mot est utilisé pour signifier beaucoup de choses différentes. Au lieu de ce mot, veuillez expliquer ce que vous essayez d'accomplir et pourquoi. Et si vous faites référence à un usage particulier, veuillez donner une référence. De plus, veuillez reformuler la phrase "certains types d'actions n'ont pas besoin, par exemple, pour equipment_id, où d'autres ont besoin de equipment_id mais pas de cause_id et de solution_id, etc". – philipxy

+0

@philipxy bien cela fonctionne comme la table de journal des actions. Ce journal va enregistrer certaines données sur les actions, y compris, son type, l'équipement utilisé, le défaut, la cause, la solution si l'un d'eux s'applique. – SaidbakR

+0

Vous n'avez pas répondu à ma question.Par "expliquer ce que vous essayez d'atteindre et pourquoi", je voulais dire, en utilisant la "normalisation". – philipxy

Répondre

1

Oui si ces _id ne sont pas si important pour la normalisation, vous pouvez les définir comme nuls ou les supprimer :)

2

Oui. Une clé étrangère contenant une valeur NULL représente un cas où une relation est facultative et la relation n'est pas présente dans cette instance.

Dans votre cas, il peut y avoir des entrées où il n'y a tout simplement pas d'équipement correspondant, et equipment_id est donc laissé NULL. Lorsqu'une jointure est faite à la table de référence, les lignes avec NULL dans la clé étrangère seront simplement supprimées.