2010-05-13 45 views
9

Đối với người có kinh nghiệm sử dụng kế thừa trong PostgreSQL: Có đáng sử dụng nó hay không hay không? Trong tình huống nào bạn sẽ sử dụng nó?Sử dụng thừa kế trong PostgreSQL

Thành thật mà nói, tôi không hoàn toàn hiểu được sự khác biệt giữa các mô hình quan hệ và OO ...

+6

@ Dr.PersonPersonII Quý ông! Tôi không quan tâm khi bạn chỉnh sửa bài viết của mình cho rõ ràng, nhưng không phải khi bạn thay đổi ý nghĩa. Để tâm trí của tôi: _ "Để được sự thật tôi là một chút nghi ngờ về trộn mô hình quan hệ và OO ..." _ và _ "Tôi không hoàn toàn hiểu sự khác biệt giữa các mô hình quan hệ và OO" _ là những điều quá khác nhau ! Sẽ được tốt đẹp nếu bạn sẽ khôi phục lại lời nói của tôi! Cảm ơn. –

+0

Prokofviev. Tôi không có ý định thay đổi ý nghĩa của bạn và tôi không thấy sự khác biệt giữa tóc và tóc mà bạn đang nói đến. Trong bối cảnh thiếu ngữ pháp trong bài viết gốc của bạn (tôi nghĩ tôi đã giúp người nói không phải là người bản ngữ), tôi không tin rằng bạn nghĩ rằng tôi đã hủy hoại câu hỏi của bạn và giọng giận dữ của bạn. Bạn chỉ đơn giản là có thể đã cố định "vấn đề" trong 5 giây và tất cả sẽ được tốt. Bạn có thể tự thay đổi bản chỉnh sửa! Tôi sẽ không bận tâm. –

+2

Không có gì cá nhân! Tôi không phải là một niềm vui lớn của tính năng StackExhange này. Nó vẫn là của tôi Orwell 1984 quá nhiều ... –

Trả lời

2

đẹp, nhưng hãy chắc chắn bạn hiểu được những hãy cẩn thận vạch ra trong cuốn hướng dẫn trước khi sử dụng nó của nó. Hiện nay cách nó xử lý các ràng buộc là một chút thô nhưng nó trên danh sách việc cần làm. Nó đặc biệt hữu ích với việc phân vùng. Một ví dụ OO khác sẽ được kế thừa từ bảng người để tạo bảng nhân viên.

Tất nhiên, nhược điểm của nó là không di chuyển đến bất kỳ rdbms nào khác vì vậy nếu bạn phải lưu trữ lại cơ sở dữ liệu trên một rdbms khác, bạn phải viết lại một loạt các thứ.

5

Có lẽ không, có những cảnh báo về sự thừa kế bảng PostgreSQL, chẳng hạn như không có ràng buộc duy nhất toàn cầu, vì vậy bạn mất nhiều sự đảm bảo nhất quán. Việc viết các truy vấn hoạt động tốt cũng có thể là một thách thức. Như được chỉ ra bởi Scott, sự thừa kế PostgreSQL chỉ thực sự hữu ích cho việc phân vùng bảng, nơi nó là một sự cân bằng hiệu suất để bắt đầu.

Có 2 cách phổ biến để sử dụng thành ngữ SQL chuẩn cho lớp kế thừa:

  • Mỗi đối tượng có một hàng cá nhân trong một bảng cha, và các đối tượng lớp con cũng có một hàng trong một bảng phân lớp cụ thể, mà đề cập đến các trường siêu lớp bằng tham chiếu khóa ngoài.
  • Chỉ cần gộp tất cả các trường siêu lớp và phân lớp trong một bảng lớn duy nhất và để chúng là NULL mà giá trị của chúng không áp dụng được. Điều này làm việc đặc biệt tốt trong PostgreSQL, bởi vì giá trị NULL chỉ tiêu thụ 1 bit cho mỗi hàng, và thêm/xóa các trường vào bảng hiện có là rất nhanh (bất kể số lượng dữ liệu). Bạn có thể có thể viết một trình kích hoạt để xác minh rằng các trường bắt buộc cho một loại lớp cụ thể có mặt.
+0

Xin lỗi không thể có được điểm thứ hai của bạn "Chỉ cần gộp tất cả các siêu lớp và phân lớp ..." Chỉ cần treo xung quanh với thừa kế và postgres. Cuối cùng làm thế nào để có được các ràng buộc khóa ngoài để làm việc với thừa kế? Gây nên? Kiểm tra? Một số hướng dẫn/liên kết? Cảm ơn. – Igor

Các vấn đề liên quan