Программа С#, над которой я работаю, должна будет экспортировать данные в одну или несколько таблиц данных. Некоторые столбцы этих таблиц будут связаны друг с другом, так что столбец идентификатора одной таблицы может ссылаться на ячейку другой таблицы. Это похоже на общий пример для создания DataRelation. Но я пытаюсь понять, как эти отношения могут быть использованы позднее.
У меня есть небольшой опыт работы с реляционными базами данных, но не так много. Я понимаю SQL-запросы и такие вещи, как LEFT join, right join и т.д. И я проделал определенную работу в Access, создавая запросы как с графическим интерфейсом, так и вручную. Но я никогда не создавал никаких связей в самой базе данных. Я попробовал это минуту назад в Access. После создания отношения я попытался добавить две мои тестовые таблицы в запрос, и соединение было автоматически создано.
Однако, когда я действительно посмотрел на фактический SQL, он фактически включил команду JOIN, которая была получена из отношений. Но это также означает, что запрос вообще не зависел от отношений. Как бы отношения использовались в базе данных, у которой нет редактора запросов типа перетаскивания, такого как Access?
Является единственной причиной, по которой я хочу создать отношения в базе данных или DataRelation в DataSet, так что я могу предположить, какие отношения должны существовать, но не обязательно заставлять их?
DataRelations используются для:
Перейдите по отношениям, например, получите дочерние строки или родительскую строку отношения:
DataRow[] orderRows = customerRow.GetChildRows("Customers_Orders");
Создайте вычисленные столбцы с выражениями, которые ссылаются на родительские или дочерние строки
OrderTotalColumn.Expression = "Sum(Child(Orders_OrderDetails).Quantity * Child(Orders_OrderDetails).UnitPrice)";
DataRelations также используются также в системе привязки Windows Forms
Мне кажется, что вы путаете ссылочную целостность на уровне ядра базы данных с приятной особенностью пользовательского интерфейса доступа.
Как объясняли другие, отношения связаны с данными, а не с диаграммой отношений симпатичной сущности, которую вы получаете в дизайнере отношений, и о простоте использования в сетке запросов Access. Отношение ограничивает значения в поле в одной таблице значениям, взятым из столбца другой таблицы.
Линии, которые вы получаете в сетке запроса при добавлении двух таблиц с RI, определенных между ними, являются результатом доступа, достаточно доступного для создания отношения по умолчанию для вас.
Доступ по умолчанию также угадывает отношения, используя "AutoJoin", параметр, который можно контролировать в TOOLS | ОПЦИИ | ТАБЛИЦЫ/ЗАПРОСЫ. Вот что это объяснение:
Выберите, чтобы автоматически создать внутреннее соединение между двумя добавляемыми таблицами к расчетной сетке. Очистить, если хотите для определения отношений между таблицы сами. Для AutoJoin все таблицы должны иметь поле с тем же именем и типом данных и одно из полей объединения должно быть первичный ключ.
В этом случае вы можете получить линии автоматического соединения, даже если отношения не определены.
Кроме того, обратите внимание, что если вы добавляете псевдонимы в сохраненный QueryDef, вы можете потерять оба типа автоматических соединений. Мне кажется, что это было что-то, что изменилось в последних версиях Access, но у меня нет времени, чтобы это проверить.
Иногда Access в конструкторе запросов автоматически объединяет поля двух таблиц, если они имеют одинаковое имя (ID), даже если вы не создали связь.
На самом деле все наоборот. Настройка связи между таблицами помогает обеспечить их соблюдение. Если вы настроите отношение внешних ключей и попытаетесь вставить данные в таблицу и не включаете внешний ключ, база данных остановит вас.
Многие БД имеют каскадные обновления и удаляются также при настройке отношений. Они будут автоматически обновлять и/или удалять дочерние отношения при обновлении/удалении родителя.
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