2010-11-30 7 views
0

J'ai 4 tables, tribunaux, divisions, adresses et numéros de téléphone. Chaque tribunal peut avoir une ou plusieurs divisions, civiles, criminelles, familiales, etc. Chacune de ces combinaisons peut avoir une ou plusieurs adresses, c'est-à-dire que la division civile d'un tribunal particulier peut être ou non à une autre adresse physique. Cour criminelle. La même chose s'applique aux numéros de téléphone, ils peuvent être les mêmes pour chaque division ou adresse, ou ils peuvent être différents.sql normalisation

J'ai envisagé plusieurs approches à ce sujet, mais je ne connais pas le meilleur à utiliser? A) Je pourrais avoir une grande table, qui reproduirait une grande partie des données plusieurs fois.

b) J'ai envisagé de conserver le FK du terrain dans la table de division et le FK de la division dans la table d'adresses. Cela signifie dupliquer les valeurs de division pour chaque terrain dans la table de division. Je ne suis pas sûr de savoir quoi faire avec la table de téléphone.

c) Ma finale était cependant d'avoir une seule table de liaison contenant toutes les 4 autres tables du FK. Cela signifierait qu'il n'y aurait pas de réplication de données, mais que cela signifierait beaucoup de jointures pour que tout soit significatif et serait probablement difficile à utiliser.

Je suis sûr que je ne suis pas évident ici, mais quelle est la meilleure façon de modéliser ces tables?

Les tables seront accessibles via CakePHP, mais peut-être laisserons-nous de côté pour l'instant.

+0

il y a déjà beaucoup de questions SO et de pages internet sur "noramlisation"! –

+0

Je suis désolé, je pense que les gens sont venus ici quand ils avaient besoin d'aide? J'ai * lu * sur la normalisation, c'est pourquoi j'essaye de produire un schéma qui ne dupliquera pas les données. Peut-être que la prochaine fois que vous poserez une question, les gens vous diront qu'il y a déjà beaucoup de pages là-bas! – Dave

Répondre

0

ce que vous décrivez est un schéma en étoile et est le moyen conseillé de le faire

court 1:m divisions 
divisions 1:m addresses 
address 1:m telephone 

je pense que vous devriez regarder ce que les questions que vous devez faire pour obtenir les données sur que vous en avez besoin, bien que juste description pas sql serait la première étape

+0

Merci pour les pensées, je pense que c'est plus comme la cour 1: m divisions, divisions 1: m adresses, divisions 1: m téléphone.J'ai regardé les schémas en étoile et l'utilisation d'une table de faits et de tableaux de dimensions multiples ressemble beaucoup à mon option c ci-dessus. Ce que je devrais alors faire est de relier une rangée de la table de faits à mon dossier principal car l'enregistrement principal doit référencer un tribunal, sa division, adresse et numéro de téléphone. Est-ce que c'est ainsi que je dois aller car je n'ai vu aucun exemple utilisant la table des faits de cette façon? – Dave

1

Si vous aurez moins de 10 000 lignes comptant toutes les combinaisons des quatre tableaux, je dirais simplement une structure de table unique à plat. La taille des données serait d'environ 80 méga si la taille de la ligne était d'environ 8 Ko. La plupart des bases de données gratuites ou à faible coût en garderont autant en mémoire et placeront votre coût d'E/S à près de zéro.

Si vous pensez avoir besoin de plusieurs tables, voici un design qui devrait vous donner plus de flexibilité pour développer votre design. Vous ajouteriez des colonnes spécifiques aux applications dans les tables affichées. La table TypeList peut contenir les types de tribunaux tels que State, Federal, Local avec les entrées étant saisies par la valeur TL_Table de "Court". La liste des divisions serait stockée ici avec le TL_Type de "Division". En utilisant le TL_Type on pourrait remplir la liste déroulante pour la saisie de données. La liste des types de numéros de téléphone peut être sur appel, fax, primaire, réceptionniste, secrétaire, sherrif, etc.

Quelle que soit la façon dont vous décidez, je suis sûr que quelqu'un aura un commentaire négatif criant, mais si cela fonctionne ils le feront juste être screeming dans l'espace.

+0

Merci pour le schéma, j'apprécie le travail que vous avez fait. J'aime la fonctionnalité TypelList. Donc, si je devais utiliser cette mise en page, et que je souhaitais lier un tribunal, une division et son adresse avec un numéro de téléphone à un dossier, de quelles clés aurais-je besoin? – Dave

+0

Je demande qu'un dossier n'existe pas dans de nombreux tribunaux ou dans de nombreuses divisions différentes, donc c'est vraiment un 1 à 1 avec le tribunal, la division, l'adresse et le téléphone. Quand une affaire arrive, on peut avoir une seule table avec caseid puis quatre clés étrangères à l'id pour l'adresse de la division du tribunal et le téléphone. Le tableau "case" serait le même pour "la grande table" ou le diagramme ci-dessus. –