EDIT1: J'ai essayé d'effacer la question en renommant les tables ET leurs relations. EDIT2: S'il vous plaît ne regardez pas le TYPE de données que je tiens dans les trois tables DB. Ils ont été fabriqués à la volée. Ce ne sont pas mes scénarios du monde réel (et non, je ne peux pas parler de mes données du monde réel .. en fait c'est 1 parent et 6 enfants, actuellement). S'il vous plaît juste ignorer quel type de données et juste regarder le fait que certaines données sont nécessaires. EDIT3: Les deux FK sont une relation 0 ou 1 à 1. PAS de 0 à plusieurs. Pas 1 à 1. J'essaie d'éviter la relation 0 ou 1 à 1 à une relation 1 à 1, donc je n'ai pas besoin d'avoir des JOINTS EXTÉRIEURS, mais plutôt avoir une INNER JOIN.Est-ce un concept de base de données OK?
Question: Je dois savoir si la conception de base de données proposée est bonne/mauvaise/lame/etc ..
Problème: aujourd'hui j'ai essayé de faire une vue indexée , mais a échoué « parce que mes tables ont extérieur joint. Soupir. Donc je me demandais si je peux refixer cette conception pour être comme la conception suivante:
- Trois tables.
- table_User a une FK sur table_Address
- table_User a une FK sur table_Vehicle
- etc ..
et le tableau B et C (qui agissent sorta comme des tables de recherche maintenant) ont ..
- Id INT IDENTITY PK
- description de NVARCHAR (100) NULLABLE
Notez le nullable? De cette façon, quelque chose dans table_User n'existe pas dans table_Address ... le champ est null (à cause de la jointure interne). Avant, je faisais un LEFT OUTER JOIN, donc s'il n'y avait pas de données dans table_b, j'obtiendrais des nulls pour chaque champ.
Je vais jeter quelques exemples de données ici ...
Table_User
- ID: 1, Nom: Fred, AddressID: 1 (NULL)
- ID: 2, Nom: Joe , AddressID: 2 (1 smith rue .....)
- ID: 3, Nom: Jane, AddressID: 2 (1 rue Smith .....)
Table_Address
- ID: 1, Description = NULL
- ID: 2, Description = 1 smith rue
etc.
Alors je peux enfin mettre tout cela dans une vue indexée. (Mon scénario de la vie réelle a environ 8 tables).
REMARQUE: DB est Microsoft Sql Server 2008, mais cela peut s'appliquer à n'importe quelle base de données.
Q1: Ce design semble-t-il correct? Q2: Donc ce que je fais ici, c'est que je normalise les données, n'est-ce pas? en gardant les jointures intérieures ensemble. Q3: Enfin, si c'est une bonne façon de procéder .. puis-je également m'assurer que les données dans les tableaux sont uniques (par exemple les adresses) en ayant des contraintes uniques ou des clés ou des index ou quoi (i je ne suis pas sûr de la terminologie appropriée).
merci les gourous!
Il devrait être possible de créer une vue indexée qui contient n'importe quel type de jointure. Quelle base de données utilisez-vous? Pouvez-vous étendre votre question avec le DDL et l'instruction create pour la vue et le message d'erreur? –
DDL? ma base de données est MS Sql 2008, et elle n'a pas permis les jointures OUTER. Enfin, je n'ai pas fait de requêtes ou de tableaux. Je dessine des images de design et je pense à l'architecture. –
Comme d'autres l'ont dit, je crains que la question ne soit pas très claire. Quel genre de relation existe-t-il entre les utilisateurs et les adresses? N: P? Pourquoi avez-vous une ligne d'adresse «factice» dans votre exemple? Vous pourriez peut-être poster un exemple de ce que vous voulez retirer de votre vue/requête, qui couvre tous ces cas. – Benjol