2010-07-05 32 views
11

Nếu tôi có một lớp được gọi là động vật, chó và cá là lớp con. Động vật có thuộc tính được gọi là "màu". Chó có thuộc tính được gọi là "độ dài đuôi" và cá không có thuộc tính này. Cá có thuộc tính được gọi là "trọng lượng", con chó không có thuộc tính này.Làm thế nào để thực hiện một siêu lớp, mối quan hệ lớp phụ trong cơ sở dữ liệu?

Vì vậy, tôi muốn thiết kế cơ sở dữ liệu để lưu trữ thông tin này. Tôi nên làm gì? Đây là một số ý tưởng:

Ý tưởng 1: Làm bảng động vật và bảng có loại, để tìm loại động vật nào, nếu là chó, hãy lấy kết quả từ bảng con chó.

Animal: màu: String loại: int

Loại: Dog: 0 Cá: 1

Dog: TailLength: int

Cá: Trọng lượng: int

Ý tưởng 2: Chỉ lưu trữ bảng Con chó và bảng Cá trong cơ sở dữ liệu, xóa con vật có thể.

Dog: Màu: String TailLength: int

Cá: Màu: String Trọng lượng: int

Trả lời

12

Hai cách tiếp cận mà bạn đề cập:

  • Một bảng biểu diễn các đối tượng trong toàn bộ hệ thống phân cấp thừa kế, với tất cả các cột bạn cần cho toàn bộ hệ thống phân cấp cộng với cột "loại" để cho bạn biết lớp con nào là một đối tượng cụ thể.
  • Một bảng cho mỗi lớp bê tông trong phân cấp thừa kế của bạn, với lược đồ trùng lặp.

có thể được bổ sung bởi hai người khác:

  • Một bảng cho mỗi lớp trong hệ thống phân cấp thừa kế của bạn - bạn bây giờ có một Animal bảng, và các lớp con có bảng với các phím nước ngoài trỏ đến phổ biến tập hợp dữ liệu trong Động vật.
  • Giản đồ chung - có bảng để lưu trữ các đối tượng và bảng thuộc tính để hỗ trợ bất kỳ tập hợp thuộc tính nào được đính kèm với đối tượng đó.

Mỗi phương pháp đều có ưu và khuyết điểm. Có một tóm tắt tốt của họ ở đây:

Ngoài ra hãy xem tại các chủ đề này SO:

Cuối cùng, cần lưu ý rằng có cơ sở dữ liệu hướng đối tượng ngoài kia đại diện cho đối tượng một cách tự nhiên ở những cơ sở dữ liệu, và có thể dễ dàng giải quyết vấn đề này, mặc dù họ là gần như không thường được sử dụng trong ngành. Dưới đây là một số liên kết mô tả DBS như so với quan hệ DBS, mặc dù họ sẽ không cung cấp cho bạn một hoàn toàn khách quan (heh) nhìn về vấn đề này:

+0

Liên kết oo thứ nhất ở cuối sẽ bị xóa. – philipxy

0

Bạn có thể thử nó như thế này:

Animal 
    PK animal_id 
    FK animal_type 
    STRING animal_name (eg. 'Lassie') 

AnimalTypes 
    PK animal_type 
    STRING animal_type_name (eg. 'Dog') 

AnimalAttributes 
    PK attribute_id 
    STRING attribute_name (eg. 'tail length') 

AnimalToAttributes 
    PK id 
    FK animal_id 
    FK attribute_id 
    INTEGER value (eg. 20) 

Bằng cách này bạn có thể có một hoặc nhiều thuộc tính cho mỗi động vật (tùy thuộc vào bạn chọn).

0

Sử dụng một số không hay một mối quan hệ Như bạn lưu ý, trong cơ sở dữ liệu schema ngôn ngữ thiết kế các bảng này được gọi là lớp - sub-class hay lớp cha

Create Table Animal 
    (animalId Integer Primary Key Not null, 
    Other columns generic to all animals) 

    Create Table Birds 
    (BirdId Integer Primary Key Not Null 
    references Animal(AnimalId), 
    -- other columns) 
Các vấn đề liên quan