Четверг Мая 17 , 2012
TEXT_SIZE
   


Отношения многие ко многим

Индекс материала
Отношения многие ко многим
Страница 2
Страница 3
Страница 4
Страница 5
Страница 6
Страница 7

В БД встречаются преимущественно отношения один ко многим. Клиент может разместить несколько заказов, на несколько товаров каждый, а сотрудник может подчиняться нескольким начальникам. Есть также отношения многие ко многим, однако определить их в БД несколько труднее. Чтобы попять, почему это так. рассмотрим таблицы authors и titles БД pubs SQL Server. Предположим, что между данными этих таблиц существует отношение многие ко многим, поскольку один автор мог написать несколько книг, а у одной книги может быть несколько авторов. Тем не менее эти две таблицы не связаны напрямую через ограничение ForeignKeyConstraint, поскольку это ограничение требует наличия уникального ключа. В связи с этим у дочерней записи не может быть несколько родительских записей в связанной таблице, т, е. здесь нет непосредственного отношения многие ко многим.

В БД pubs также есть таблица titleauthor (рис. 7-5), позволяющая создать косвенное отношение многие ко многим. В данной таблице определен составной первичный ключ, включающий поля au_id и title_id — поля первичного ключа таблиц authors и titles соответственно. Предположим, что над одной из книг работали два автора.

В таблице titleauthor для такой книги будет две записи — по одной для каждого автора. Таким образом, таблица titleauthor позволит отыскать значения первичного ключа для всех авторов конкретной книги. Точно так же выполняется поиск значения первичного ключа всех книг, которые автор написал самостоятельно или в работе над которыми принимал участие. Следующий код получает данные из всех трех таблиц. Он добавляет объекты DataRelation, связывающие таблицу authors и titleauthor, а также таблицу titles и titleauthor. Далее код просматривает записи объекта DataTable authors, выводит имя автора и затем при помощи объектов DataRelation выводит написанные этим автором книги.

Visual Basic. NET Dim strConn, strSQL. as string strConn = "Provider=SQLOLEDB;Data Source=(local)\NetSDK; " & "Initial Catalog=Northwind;Trusted_Connection=Yes;Dim en As New OleDbConnection(strConn) cn. Open() Dim daAuthors, daTitles, daTitleAuthor As OleDbDataAOapter strSQL = "SELECT au_id, au_lname, au^fname FROM authorsdaAuthors = New OleDbDataAdapter(strSQL, en) StrSQL = "SELECT title. id, title FROM titlesdaTitles = New OleDbDataAdapter{strSQL, en) strSQL = "SELECT au_id, title. id FROM titleauthordaTitleAuthor = New OleDbDataAdapter(strSQL, en) Dim ds As New DataSet() daAuthors. Fill(ds, "authors") daTitles.



Комментарии  

 
0 #1 Никита 08.12.2010 16:22
как раз то что нужно
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Рейтинг пользователей: / 0
ХудшийЛучший 

Метео

Войти

Голосование

Идеальный вариант проведения новогодней корпоративной вечеринки - это…

Сейчас на сайте

Сейчас 6 гостей онлайн