Какова цель DataRelation в DataSet?

2

Программа С#, над которой я работаю, должна будет экспортировать данные в одну или несколько таблиц данных. Некоторые столбцы этих таблиц будут связаны друг с другом, так что столбец идентификатора одной таблицы может ссылаться на ячейку другой таблицы. Это похоже на общий пример для создания DataRelation. Но я пытаюсь понять, как эти отношения могут быть использованы позднее.

У меня есть небольшой опыт работы с реляционными базами данных, но не так много. Я понимаю SQL-запросы и такие вещи, как LEFT join, right join и т.д. И я проделал определенную работу в Access, создавая запросы как с графическим интерфейсом, так и вручную. Но я никогда не создавал никаких связей в самой базе данных. Я попробовал это минуту назад в Access. После создания отношения я попытался добавить две мои тестовые таблицы в запрос, и соединение было автоматически создано.

Однако, когда я действительно посмотрел на фактический SQL, он фактически включил команду JOIN, которая была получена из отношений. Но это также означает, что запрос вообще не зависел от отношений. Как бы отношения использовались в базе данных, у которой нет редактора запросов типа перетаскивания, такого как Access?

Является единственной причиной, по которой я хочу создать отношения в базе данных или DataRelation в DataSet, так что я могу предположить, какие отношения должны существовать, но не обязательно заставлять их?

Теги:
ms-access
dataset

4 ответа

1
Лучший ответ

DataRelations используются для:

  • Обеспечить ссылочную целостность (вы не можете ссылаться на строку, которая не существует в родительской таблице)
  • Перейдите по отношениям, например, получите дочерние строки или родительскую строку отношения:

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

  • Создайте вычисленные столбцы с выражениями, которые ссылаются на родительские или дочерние строки

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

DataRelations также используются также в системе привязки Windows Forms

0

Мне кажется, что вы путаете ссылочную целостность на уровне ядра базы данных с приятной особенностью пользовательского интерфейса доступа.

Как объясняли другие, отношения связаны с данными, а не с диаграммой отношений симпатичной сущности, которую вы получаете в дизайнере отношений, и о простоте использования в сетке запросов Access. Отношение ограничивает значения в поле в одной таблице значениям, взятым из столбца другой таблицы.

Линии, которые вы получаете в сетке запроса при добавлении двух таблиц с RI, определенных между ними, являются результатом доступа, достаточно доступного для создания отношения по умолчанию для вас.

Доступ по умолчанию также угадывает отношения, используя "AutoJoin", параметр, который можно контролировать в TOOLS | ОПЦИИ | ТАБЛИЦЫ/ЗАПРОСЫ. Вот что это объяснение:

Выберите, чтобы автоматически создать внутреннее соединение между двумя добавляемыми таблицами к расчетной сетке. Очистить, если хотите для определения отношений между таблицы сами. Для AutoJoin все таблицы должны иметь поле с тем же именем и типом данных и одно из полей объединения должно быть первичный ключ.

В этом случае вы можете получить линии автоматического соединения, даже если отношения не определены.

Кроме того, обратите внимание, что если вы добавляете псевдонимы в сохраненный QueryDef, вы можете потерять оба типа автоматических соединений. Мне кажется, что это было что-то, что изменилось в последних версиях Access, но у меня нет времени, чтобы это проверить.

0

Иногда Access в конструкторе запросов автоматически объединяет поля двух таблиц, если они имеют одинаковое имя (ID), даже если вы не создали связь.

0

На самом деле все наоборот. Настройка связи между таблицами помогает обеспечить их соблюдение. Если вы настроите отношение внешних ключей и попытаетесь вставить данные в таблицу и не включаете внешний ключ, база данных остановит вас.

Многие БД имеют каскадные обновления и удаляются также при настройке отношений. Они будут автоматически обновлять и/или удалять дочерние отношения при обновлении/удалении родителя.

DataRelation работает аналогично тем, что помогает навязывать отношения на уровне кода....

Здесь ссылка на некоторые основы проектирования базы данных: http://www.sqlteam.com/article/database-design-and-modeling-fundamentals. # 4, 5, 6 и 7 говорят о связях.

И вот еще один для получения дополнительной информации: http://www.deeptraining.com/litwin/dbdesign/FundamentalsOfRelationalDatabaseDesign.aspx

Вот учебник по использованию DataRelation, который поможет с отношением родителя/ребенка в коде при использовании DataSet:

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

И здесь MSDN для DataRelation: http://msdn.microsoft.com/en-us/library/system.data.datarelation(VS.80).aspx

Ещё вопросы

Сообщество Overcoder
Наверх
Меню