Thứ Tư, 4 tháng 2, 2009

Quan hệ Many to Many Trong Entity Data Model

Hướng dẫn này sẽ giải thích làm sao xuất hiện nhiều mối quan hệ trong Data Entity Model.

Quan hệ Many to Many là gì?

Một nhiều để có nhiều mối quan hệ là một trong những nơi hai bảng dữ liệu hoặc các thực thể có nhiều hàng được kết nối với một hoặc một số hàng trong bảng khác.

Một ví dụ điển hình là EmployeeAddress tham gia bảng trong cơ sở dữ liệu mẫu AdventureWorks. Một nhân viên có thể có nhiều địa chỉ (nhà, nghỉ phép, vv) và nó có thể cho một địa chỉ để áp dụng cho nhân viên nhiều. Trong cơ sở dữ liệu, một bảng tham gia thường được sử dụng để tạo ra các mối quan hệ.

Lưu ý rằng có tính chất bổ sung trong bảng tham gia theo dõi các loại địa chỉ (một tuỳ biến của bảng gốc), khi tham gia đã được tạo/sửa đổi và một định danh duy nhất cho mỗi hàng.

Một ví dụ khác của việc này là sinh viên và Lớp học tại một cơ sở dữ liệu để quản lý một trường học. Một học sinh có thể được trong nhiều lớp học và một lớp có thể có nhiều sinh viên.


Quan hệ Many to Many Trong Entity Data Model

Entity Data Model Wizard xử lý hai bộ bàn rất khác khi chúng được nhập khẩu vào một EDM.

Các Employee/Addresses các thực thể nhân bản các bảng - hai thực thể với một thực thể tham gia ở giữa. Có những tài sản chuyển hướng để đi qua giữa ba thực thể, Employee.EmployeeAddresses được bạn từ Employee đến tham gia thực thể và từ đó bạn có thể sử dụng EmployeesAddresses.Addresses để có được các Addresses cho bạn bắt đầu với Employee.

Sử dụng dữ liệu này trong mã yêu cầu tham gia xây dựng các truy vấn hoặc các truy vấn mà khoan thông qua menu nhiều tài sản (ví dụ như Employee.EmployeeAddress.Addresses), ví dụ:

Private Sub employeeaddress()
Dim aw As New AdventureWorksTModel.AdventureWorksTEntities
Dim empaddQuery = From e In aw.Employees, ea In e.EmployeeAddresses _
Select e.EmployeeID, e.HireDate, ea.AddressType, ea.Addresses.City
For Each emp In empaddQuery.OrderBy(Function(e) e.EmployeeID)
Console.WriteLine(String.Format("ID {0}:: Hire Date: {1:d}, Address Type: {2}, City {3}", _
emp.EmployeeID, emp.HireDate, emp.AddressType, emp.City))
Next
End Sub

Những kết quả với:

ID 1:: Hire Date: 7/31/1996, Address Type: Home , City Monroe
ID 1:: Hire Date: 7/31/1996, Address Type: Vacation , City Seattle
ID 2:: Hire Date: 2/26/1997, Address Type: Home , City Bellevue
ID 2:: Hire Date: 2/26/1997, Address Type: Weekend , City Everett
etc...

Student/class thực thể tuy nhiên, không có tham gia bảng. Thay vào đó họ có tài sản chuyển hướng để có được dữ liệu liên quan của họ. Bạn có thể truy vấn class.students và bạn có thể truy vấn cho student.classes.

Đây là một lợi ích đặc biệt mà các khung thực thể cung cấp khi tham gia các bảng chỉ chứa các phím và không có các cột bổ sung.

Bởi vì điều này có thể đi qua trực tiếp vào các dữ liệu liên quan mà không cần sử dụng một thực thể tham gia. Dưới đây là một ví dụ mà sử dụng một lồng nhau từ khoản để tạo ra một loại anoymous dựa trên các dữ liệu liên quan.

Private Sub studentclasses()
Dim school As New SchoolSampleModel.SchoolSampleEntities
Dim studclassQuery = From student In school.students From c In student.classes _
Select student.firstname, student.lastname, c.classname
For Each student In studclassQuery.OrderBy(Function(s) s.lastname & s.firstname)
Console.WriteLine(String.Format("Student {0},{1}: {2}", _
student.lastname.TrimEnd, student.firstname.Trim, student.classname))
Next
End Sub 
 
Những kết quả  với:
Student Doe,John: European History
Student Doe,John: Art History
Student Robin,Stacey: American History
Student Smith,Jane: American History
Student Smith,Jane: French
Student Williams,Bill: European History
Student Williams,Bill: French
Student Williams,Bill: Computers 101

Chúc Bạn Thành Công.
DangTrung.

Không có nhận xét nào:

Đăng nhận xét