Quan hệ 1-1 trong sql là gì

3/18/2020

Quan hệ 1-1 trong sql là gì
Quan hệ 1-1 trong sql là gì

Một trong các mục tiêu của việc thiết kế cơ sở dữ liệu tốt là phải loại bỏ được dữ liệu thừa (dữ liệu trùng lặp). Để đạt được mục tiêu này, bạn hãy chia dữ liệu thành nhiều bảng theo chủ đề để mỗi sự kiện chỉ được thể hiện một lần. Sau đó bạn cung cấp cách thức để Access tổng hợp các thông tin đã chia lại với nhau  — bạn thực hiện thao tác này bằng cách đặt các trường chung vào trong các bảng liên quan. Tuy vậy, để thực hiện đúng bước này, bạn phải hiểu các mối quan hệ giữa các bảng, rồi sau đó xác định các mối quan hệ này trong cơ sở dữ liệu của bạn.

Trong bài viết này

Giới thiệu

Các kiểu quan hệ bảng

Tại sao phải tạo mối quan hệ bảng?

Hiểu tính toàn vẹn tham chiếu

Xem mối quan hệ bảng

Giới thiệu

Sau khi bạn đã tạo xong một bảng cho từng chủ đề trong cơ sở dữ liệu của bạn, bạn phải đưa ra cách để Access tổng hợp các thông tin đó lại khi cần thiết. Bạn thực hiện điều này bằng cách đặt các trường chung vào các có liên quan và bằng cách xác định các mối quan hệ giữa các bảng. Sau đó bạn có thể tạo các truy vấn, biểu mẫu và báo cáo sẽ cùng hiển thị thông tin từ một số bảng. Ví dụ: biểu mẫu hiện ở đây bao gồm các thông tin được lấy từ một vài bảng:

Quan hệ 1-1 trong sql là gì

1. Các thông tin trong biểu mẫu này được lấy từ bảng Khách hàng...

2. ...bảng Đơn hàng...

3. ...bảng Sản phẩm...

4. ...và bảng Chi tiết Đơn hàng.

Tên khách hàng trong hộp Gửi hóa đơn đến được truy xuất từ bảng Khách hàng, ID Đơn hàng và các giá trị Ngày Đơn hàng được lấy từ bảng Đơn hàng, tên Sản phẩm được lấy từ bảng Sản phẩm và các giá trị Giá Đơn vị và Số lượng được lấy từ bảng Chi tiết Đơn hàng. Các bảng này được nối kết với nhau theo nhiều cách để thu thập các thông tin từ mỗi bảng vào trong biểu mẫu.

Trong ví dụ trước, các trường trong các bảng phải được phối hợp để thể hiện các thông tin về cùng một đơn hàng. Thực hiện việc phối hợp này bằng cách dùng các mối quan hệ bảng. Mối quan hệ bảng hoạt động bằng cách khớp dữ liệu trong các trường khóa — thường là một trường có cùng tên trong cả hai bảng. Trong hầu hết các trường hợp, các trường khớp này đều là khóa chính - primary key từ một bảng, bảng này sẽ cung cấp một mã định danh duy nhất cho từng bản ghi và khóa ngoại - foreign key trong bảng khác. Ví dụ: nhân viên có thể được kết hợp với các đơn hàng mà họ chịu trách nhiệm qua việc tạo ra một mối quan hệ bảng giữa các trường IDNhân viên trong các bảng Nhân viên và Đơn hàng.

Quan hệ 1-1 trong sql là gì

1. IDNhân viên xuất hiện ở cả hai bảng — ở dạng khóa chính...

2. ... và ở dạng khóa ngoại.

Các kiểu quan hệ bảng

Có ba kiểu quan hệ bảng trong Access.

  • Mối quan hệ một - nhiều

Chúng ta hãy dùng cơ sở dữ liệu theo dõi đơn hàng chẳng hạn như bao gồm một bảng Khách hàng và một bảng Đơn hàng. Một khách hàng có thể đặt bất kỳ số lượng đơn hàng nào. Vì vậy, đối với mọi khách hàng được thể hiện trong bảng Khách hàng, có thể có nhiều đơn hàng được thể hiện trong bảng Đơn hàng. Mối quan hệ giữa bảng Khách hàng và bảng Đơn hàng là mối quan hệ một đối nhiều.

Để thể hiện mối quan hệ một-nhiều trong thiết kế cơ sở dữ liệu của bạn, hãy lấy khóa chính ở bên "một" của mối quan hệ rồi thêm khóa đó dưới dạng một trường hay nhiều trường bổ sung vào bảng ở bên "nhiều" của mối quan hệ. Chẳng hạn như trong trường hợp này, bạn thêm một trường mới — trường ID từ bảng Khách_hàng — vào bảng Đơn_hàng, rồi đặt tên cho trường đó là ID_khách_hàng. Sau đó, Access có thể sử dụng số ID khách hàng trong bảng Đơn_hàng để xác định khách hàng phù hợp cho từng đơn hàng.

  • Mối quan hệ nhiều đối nhiều

Bây giờ chúng ta hãy xem mối quan hệ giữa bảng Sản phẩm và bảng Đơn hàng. Mỗi một đơn hàng có thể bao gồm nhiều hơn một sản phẩm. Mặt khác, mỗi một sản phẩm có thể xuất hiện trên nhiều đơn hàng. Vì vậy, đối với mỗi bản ghi trong bảng Đơn hàng, có thể có nhiều bản ghi trong bảng Sản phẩm. Thêm vào đó, đối với mỗi bản ghi trong bảng Sản phẩm, có thể có nhiều bản ghi trong bảng Đơn hàng. Mối quan hệ này được gọi là mối quan hệ nhiều đối nhiều. Lưu ý là để tìm ra các mối quan hệ nhiều đối nhiều đã có sẵn giữa các bảng của bạn, điều quan trọng là bạn hãy cân nhắc cả hai phía của mối quan hệ.

Để thể hiện một mối quan hệ nhiều đối nhiều, bạn phải tạo ra một bảng thứ ba, bảng này sẽ tách mối quan hệ nhiều đối nhiều thành hai mối quan hệ một đối nhiều. Bạn hãy chèn khóa chính từ mỗi bảng trong hai bảng vào bảng thứ ba. Kết quả là bảng thứ ba sẽ ghi lại từng lần xuất hiện hay từng phiên bản của mối quan hệ. Ví dụ: bảng Đơn hàng và bảng Sản phẩm có mối quan hệ nhiều đối nhiều vốn được xác định bằng cách tạo ra hai mối quan hệ một đối nhiều đối với bảng Chi tiết Đơn hàng. Một đơn hàng có thể có nhiều sản phẩm và mỗi sản phẩm có thể xuất hiện trên nhiều đơn hàng.

  • Mối quan hệ một đối một

Trong quan hệ một đối một, mỗi bản ghi trong bảng thứ nhất có thể chỉ có một bản ghi khớp với bảng thứ hai và mỗi bản ghi trong bảng thứ hai có thể chỉ có một bản ghi khớp với bản ghi thứ nhất. Mối quan hệ là không bình thường, vì phổ biến nhất đó là thông tin có liên quan theo cách này phải được lưu trong cùng một bảng. Bạn có thể dùng quan hệ một đối một để chia một bảng có nhiều trường, để tách một phần của bảng do các lý do bảo mật hoặc để lưu các thông tin chỉ áp dụng đối với một tập hợp con trong bảng chính. Khi bạn thực sự xác định được một mối quan hệ, thì cả hai bảng phải có một trường chung.

Tại sao phải tạo mối quan hệ bảng?

Bạn có thể tạo các mối quan hệ bảng một cách rõ ràng bằng cách dùng cửa sổ Relationships hoặc bằng cách kéo một trường từ ngăn Field List. Access sẽ dùng mối quan hệ bảng để xác định cách nối các bảng khi bạn cần dùng chúng trong một đối tượng cơ sở dữ liệu. Có một số nguyên nhân giải thích tại sao bạn phải tạo các mối quan hệ bảng trước khi bạn tạo ra các đối tượng cơ sở dữ liệu khác như biểu mẫu, truy vấn và báo cáo.

  • Mối quan hệ bảng truyền dữ liệu cho các thiết kế truy vấn của bạn

Để làm việc với các bản ghi có nhiều bảng, bạn thường phải tạo một truy vấn để nối các bảng. Truy vấn hoạt động bằng cách khớp các giá trị trong trường khóa chính trong bảng đầu với một trường khóa ngoạị ở bảng thứ hai. Ví dụ: để trả về các hàng theo đó sẽ liệt kê tất cả các đơn hàng cho từng khách hàng, bạn hãy dựng một truy vấn để nối bảng Khách hàng với bảng Đơn hàng dựa vào trường ID Khách hàng. Trong cửa sổ Mối quan hệ, bạn có thể xác định trường để nối một cách thủ công. Nhưng nếu bạn đã có một mối quan hệ đã xác định giữa các bảng, Access phải cung cấp đường nối mặc định, dựa trên mối quan hệ bảng đã có sẵn. Ngoài ra, nếu bạn dùng một trong số các trình hướng dẫn truy vấn, Access phải dùng thông tin nó thu thập được từ các mối quan hệ bảng bạn đã xác định để cung cấp các lựa chọn thông tin cập nhật cho bạn và để nhập trước thiết đặt thuộc tính cùng với các giá trị mặc định thích hợp.

  • Mối quan hệ bảng truyền dữ liệu cho các thiết kế biểu mẫu và báo cáo của bạn

Khi bạn thiết kế một biểu mẫu hay một báo cáo, Access dùng thông tin nó thu thập được từ các mối quan hệ bảng bạn đã xác định để cung cấp các lựa chọn thông tin cập nhật cho bạn và để nhập trước thiết đặt thuộc tính cùng với các giá trị mặc định thích hợp.

  • Mối quan hệ bảng là nền tảng theo đó bạn có thể bắt buộc tính toàn vẹn tham chiếu để giúp ngăn các bản ghi vô định trong cơ sở dữ liệu của bạn. Bản ghi vô định là một bản ghi có tham chiếu tới một bản ghi không tồn tại — ví dụ: một bản ghi đơn hàng tham chiếu tới một bản ghi khách hàng không tồn tại.

Khi bạn thiết kế một cơ sở dữ liệu, bạn hãy chia thông tin thành các bảng, mỗi bảng có một khóa chính. Sau đó bạn thêm các khóa ngoạị vào các bảng liên quan sẽ tham chiếu tới các khóa chính đó. Cặp khóa ngoại-khóa chính này sẽ tạo nền tảng cho các mối quan hệ bảng và các truy vấn đa bảng. Điều quan trọng là các tham chiếu của khóa ngoại-khóa chính này vẫn phải được đồng bộ hóa. Tính toàn vẹn tham chiếu, phụ thuộc vào các mối quan hệ bảng, sẽ giúp bảo đảm là các tham chiếu tiếp tục được đồng bộ hóa.

Hiểu tính toàn vẹn tham chiếu

Khi bạn thiết kế một cơ sở dữ liệu, bạn hãy chia thông tin cơ sở dữ liệu thành nhiều bảng theo chủ đề để giảm thiểu việc dư thừa dữ liệu. Sau đó bạn hãy đưa ra cách để Access hợp dữ liệu lại bằng cách đặt các trường chung vào các bảng liên quan. Ví dụ: để thể hiện quan hệ một đối nhiều bạn hãy lấy một khóa chính từ bảng "một" và thêm nó ở dạng một trường bổ sung vào bảng "nhiều". Để hợp dữ liệu lại với nhau, Access sẽ lấy giá trị trong bảng "nhiều" và tra cứu giá trị tương ứng trong bảng "một". Bằng cách này các giá trị trong bảng "nhiều" sẽ tham chiếu các giá trị tương ứng trong bảng "một".

Giả sử bạn có quan hệ một đối nhiều giữa bảng Công ty Vận tải Hàng hải và Đơn hàng và bạn muốn xóa bỏ một Công ty Vận tải Hàng hải. Nếu công ty vận tải hàng hải bạn muốn xóa bỏ có các đơn hàng trong bảng Đơn hàng, thì các đơn hàng đó sẽ trở thành "mồ côi" khi bạn xóa bỏ bản ghi của Công ty Vận tải Hàng hải đó. Các đơn hàng vẫn sẽ chứa ID của công ty vận tải hàng hải, nhưng ID đó sẽ không còn hợp lệ, vì bảng ghi nó tham chiếu tới không còn tồn tại nữa.

Mục đích của tính toàn vẹn tham chiếu là phải ngăn được các dòng mồ côi và giữ các tham chiếu trong tình trạng đồng bộ hóa để tình huống giả định này không xảy ra.

Bạn thực thi tính toàn vẹn tham chiếu bằng cách kích hoạt tính toàn vẹn trong mối quan hệ bảng. Khi đã bắt buộc tính toàn vẹn tham chiếu, Access sẽ từ chối bất cứ thao tác nào vi phạm tính toàn vẹn tham chiếu đối với mối quan hệ bảng đó. Điều này có nghĩa là Access sẽ từ chối cả cập nhật làm thay đổi đích của tham chiếu lẫn những xóa bỏ nhằm loại bỏ đích của tham chiếu. Có thể là bạn có một nhu cầu hoàn toàn hợp lý để thay đổi khóa chính đối với một công ty vận tải hàng hải có các đơn hàng trong bảng Đơn hàng. Trong trường hợp này, những gì bạn cần là để cho Access tự động cập nhật tất cả các hàng bị ảnh hưởng như là một phần của từng thao tác. Bằng cách đó, Access sẽ bảo đảm là cập nhật được hoàn thành đầy đủ để cơ sở dữ liệu của bạn không bị rơi vào trạng thái không nhất quán, với một số hàng thì được cập nhật và một số thì không. Vì lý do này Access sẽ hỗ trợ cho tùy chọn Cascade Update Related Fields. Khi bạn bắt buộc tính toàn vẹn tham chiếu và chọn tùy chọn Cascade Update Related Fields và sau đó cập nhật một khóa chính, Access sẽ tự động cập nhật tất cả các trường tham chiếu khóa chính.

Có thể bạn có một nhu cầu hợp lý để xóa bỏ một hàng và tất cả bản ghi liên quan — ví dụ, một bản ghi Công ty Vận tải Hàng hải và tất cả các đơn hàng liên quan cho công ty vận tải hàng hải đó. Vì lý do này, Access hỗ trợ tùy chọn Cascade Delete Related Records. Khi bạn buộc tính toàn vẹn tham chiếu và chọn tùy chọn Cascade Delete Related Records và sau đó xóa bỏ một bản ghi ở phía khóa chính của mối quan hệ, Access sẽ tự động xóa bỏ tất cả các bản ghi tham chiếu khóa chính.

Xem mối quan hệ bảng

Để xem mối quan hệ bảng, hãy bấm Relationships trên tab Database Tools. Cửa sổ Relationships sẽ mở và hiển thị mọi mối quan hệ có sẵn. Nếu chưa có mối quan hệ bảng nào được xác định và bạn đang mở cửa sổ Mối quan hệ lần đầu tiên, Access sẽ nhắc bạn thêm bảng hoặc truy vấn vào cửa sổ này.

Mở cửa sổ Relationships

  1. Bấm File, rồi bấm Open.
  2. Chọn và mở cơ sở dữ liệu.
  3. Trên tab Database Tools, trong nhóm Relationships, bấm Relationships.

    Nếu cơ sở dữ liệu có chứa các mối quan hệ, thì cửa sổ Mối quan hệ sẽ xuất hiện. Nếu cơ sở dữ liệu không chứa bất kỳ mối quan hệ nào và bạn đang mở cửa sổ Mối quan hệ lần đầu, thì hộp thoại Show Table sẽ xuất hiện. Bấm Close để đóng hộp thoại.

  4. Trên tab Design, trong nhóm Relationships, hãy bấm All Relationships.

    Thao tác này sẽ hiển thị tất cả các mối quan hệ đã xác định trong cơ sở dữ liệu của bạn. Xin lưu ý là các bảng ẩn (bảng có hộp kiểm Hidden trong hộp thoại Properties của bảng được chọn) và các mối quan hệ của chúng sẽ không được thể hiện trừ khi bạn chọn hộp kiểm Show Hidden Objects trong hộp thoại Navigation Options.

Một quan hệ bảng được thể hiện bởi một đường quan hệ nối giữa hai bảng trong cửa sổ Quan hệ. Một mối quan hệ không buộc tính toàn vẹn tham chiếu sẽ xuất hiện ở dạng một đường mảnh giữa các trường chung để hỗ trợ cho mối quan hệ. Khi bạn chọn mối quan hệ bằng cách bấm vào đường quan hệ, thì đường này sẽ dày lên để biểu thị là nó được chọn. Nếu bạn bắt buộc tính toàn vẹn tham chiếu cho mối quan hệ này, thì đường này sẽ hiện dày hơn ở mỗi đầu. Ngoài ra, số 1 sẽ xuất hiện trên phần dày của đường ở một phía của mối quan hệ và biểu tượng vô cực () sẽ xuất hiện ở phần dày của đường ở phía kia.

Khi cửa sổ Relationships được kích hoạt, bạn có thể chọn các lệnh sau đây:

Trên tab Design, trong nhóm Tools:

  • Edit Relationships    Mở hộp thoại Edit Relationships. Khi bạn chọn một đường quan hệ, bạn có thể bấm Edit Relationships để thay đổi quan hệ bảng. Bạn cũng có thể bấm đúp vào đường quan hệ.
  • Clear Layout     Loại bỏ sự hiển thị của tất cả các bảng và mối quan hệ trong cửa sổ Relationships. Lưu ý là lệnh này chỉ ẩn được các bảng và các mối quan hệ — nó không xóa bỏ được chúng.
  • Relationships Report     Tạo ra một báo cáo mà sẽ hiển thị các bảng và các mối quan hệ trong cơ sở dữ liệu của bạn. Báo cáo sẽ chỉ hiện các bảng và các quan hệ không bị ẩn trong cửa sổ Relationships.

Trên tab Design, trong nhóm Relationships:

  • Show Table    Mở hộp thoại Show Table để bạn có thể chọn các bảng và các truy vấn để xem trong cửa sổ Relationships.
  • Hide Table    Ẩn các bảng đã chọn trong cửa sổ Relationships.
  • All Relationships Hiển thị tất cả các quan hệ và các bảng liên quan đối với bảng đã chọn trong cửa sổ Relationships, nếu chúng chưa được hiển thị.
  • All Relationships     Hiển thị tất cả các mối quan hệ và bảng liên quan trong cơ sở dữ liệu trong cửa sổ Relationships. Lưu ý là sẽ không hiện được các bảng ẩn (các bảng có hộp kiểm Hidden được chọn ở trong hộp thoại Properties của bảng) cũng như mối quan hệ của chúng trừ khi bạn chọn Show Hidden Objects trong hộp thoại Navigation Options.
  • Close    Đóng cửa sổ Relationships. Nếu bạn đã thực hiện bất kỳ thay đổi nào đối với bố trí của cửa sổ Relationships, thì bạn sẽ được yêu cầu là bạn có muốn lưu các thay đổi đó hay không.