2009-08-26 9 views
2

Un programme C# sur lequel je travaille devra exporter des données vers un ou plusieurs tableaux de données. Certaines colonnes de ces tables seront liées les unes aux autres, de sorte que la colonne ID d'une table peut être référencée par la cellule d'une autre table. Cela semble être le cas courant pour la configuration d'une DataRelation. Mais j'essaie de comprendre comment ces relations peuvent être utilisées plus tard. J'ai un peu d'expérience avec les bases de données relationnelles, mais pas beaucoup. Je comprends les requêtes SQL et d'autres choses comme la jointure à gauche, la jointure à droite, etc. Et j'ai travaillé dans Access en créant des requêtes à la fois avec l'interface graphique et à la main. Mais je n'ai jamais créé de relations dans la base de données elle-même. J'ai essayé cela il y a une minute dans Access. Après avoir créé une relation, j'ai essayé d'ajouter mes deux tables de test à une requête, et la jointure a été créée automatiquement.Quel est le but d'une DataRelation dans un DataSet?

Cependant, lorsque j'ai réellement regardé le SQL réel, il incluait en fait une commande JOIN dérivée des relations. Mais cela signifie également que la requête ne dépendait pas du tout de la relation. Comment une relation peut-elle être utilisée dans une base de données qui ne dispose pas d'un éditeur de requête de type glisser-déposer comme Access? Est-ce que la seule raison pour laquelle je voudrais créer une relation dans une base de données, ou une DataRelation dans un DataSet, est que je puisse impliquer quelles relations devraient exister mais pas nécessairement les forcer?

Répondre

1

Les données sont utilisées pour:

  • Faire respecter l'intégrité référentielle (vous ne pouvez pas faire référence à une ligne qui n'existe pas dans la table parent)
  • Naviguer à travers les relations, par exemple obtenir les lignes enfants ou de la ligne de parent d'une relation:

    DataRow[] orderRows = customerRow.GetChildRows("Customers_Orders");

  • Créer des colonnes calculées avec des expressions qui font référence aux lignes de parent ou de l'enfant

    OrderTotalColumn.Expression = "Sum(Child(Orders_OrderDetails).Quantity * Child(Orders_OrderDetails).UnitPrice)";

DataRelations sont également utilisés également dans le système de fixation Windows Forms

0

Actuellement, c'est le contraire. La mise en place d'une relation entre les tables permet de les appliquer. Si vous définissez une relation de clé étrangère et essayez d'insérer des données dans une table sans inclure la clé étrangère, la base de données vous arrêtera.

De nombreuses bases de données ont des mises à jour en cascade et des suppressions également lors de la configuration des relations. Ils mettront à jour et/ou supprimeront automatiquement les relations enfants lors de la mise à jour/suppression du parent.

DataRelation fonctionne de façon similaire en ce qu'elle contribue à faire régner les relations au niveau du code ....

Voici un lien vers quelques-unes des bases de la conception de base de données: http://www.sqlteam.com/article/database-design-and-modeling-fundamentals. # 4, 5, 6 et 7 parlent de relations.

Et voici une autre pour plus d'informations sur: http://www.deeptraining.com/litwin/dbdesign/FundamentalsOfRelationalDatabaseDesign.aspx

Voici un tutoriel sur l'utilisation du DataRelation pour aider avec le parent/relation enfant dans le code lorsque vous utilisez un DataSet:

http://www.dotnetjohn.com/articles.aspx?articleid=63

Et voici le MSDN pour le DataRelation: http://msdn.microsoft.com/en-us/library/system.data.datarelation(VS.80).aspx

0

Parfois Access dans le concepteur de requêtes rejoindra automatiquement les champs de deux tables si elles sont le même nom (ID), même si vous avez pas créé la relation.

0

Il me semble que vous confondez l'intégrité référentielle au niveau du moteur de base de données avec une fonctionnalité intéressante de l'interface utilisateur Access. Comme d'autres l'ont expliqué, une relation concerne les données, pas le joli diagramme de relation d'entité que vous obtenez dans le concepteur de relations, ni la facilité d'utilisation dans la grille de requête Access. Une relation restreint les valeurs d'un champ d'une table aux valeurs tirées d'une colonne d'une table différente.

Les lignes que vous obtenez dans la grille de la requête lorsque vous ajoutez deux tables avec RI définies entre elles résultent du fait qu'Access est assez sympa pour dessiner la relation par défaut pour vous.

L'accès par défaut permet également de deviner les relations en utilisant "AutoJoin", un paramètre qui peut être contrôlé dans TOOLS | OPTIONS | TABLES/QUESTIONS. Voici le Quelle est cette explication:

Sélectionnez cette option pour créer automatiquement une jointure interne entre deux tables vous ajoutez à la grille de conception. Décochez si vous souhaitez que définisse vous-même les relations entre les tables . Pour le AutoJoin à se produire, les tables doivent chacune avoir un champ avec le même nom et le même type de données et l'un des champs de jointure doit être une clé primaire .

Dans ce cas, vous pouvez obtenir des lignes de jointure automatiques même lorsqu'aucune relation n'est définie.

Notez également que si vous aliasz des champs dans un QueryDef enregistré, vous pouvez perdre les deux types de jointures automatiques. Cela me semble être quelque chose qui a changé dans les versions récentes d'Access, mais je n'ai pas le temps de vérifier cela.