Chào ACE,
Vấn đề 1:
Giữa 2 table có quan hệ 1-n mình thiết kế như sau:
Table a
field 1: fields.char('F 1', size=30,required=True),
field 2: fields.many2one('Table b','F 2')
Table b:
Field 3: fields.char('F 3', size=30,required=True),
field 4: fields.one2many('Table a','field 2','F 2'),
Mình tạo như vậy có ổn không?
Đó là về mối quan hệ 1-n.
Vấn đề 2:
Về mối quan hệ n-n: theo nguyên tắc mình chuẩn hóa mối quan hệ này thành 1 - n. Ví dụ như mối quan hệ sinh viên và môn học: 1 sinh viên có thể đăng ký nhiều môn học và 1 môn học có nhiều sinh viên đăng ký. Khi đó mình chuẩn hóa như sau:
SV - MH=> SV(1) - (n)Biên lai(n) - (1)MH.
SV có PK là Mã SV, MH có PK là Mã MH. Theo nguyên tắc khi chuẩn hóa mình có thể lấy PK của SV và MH làm PK cho table Biên lai. Như vậy table Biên lai có 2 PK là Mã SV và Mã MH.
Các ACE giúp mình design table Biên lai này với!
Thanks.
0
1 Trả lời
Best Answer
Chào ACE,
Vấn đề 1:
Giữa 2 table có quan hệ 1-n mình thiết kế như sau:
Table a
field 1: fields.char('F 1', size=30,required=True),
field 2: fields.many2one('Table b','F 2')
Table b:
Field 3: fields.char('F 3', size=30,required=True),
field 4: fields.one2many('Table a','field 2','F 2'),
Mình tạo như vậy có ổn không?
Đó là về mối quan hệ 1-n.
Vấn đề 2:
Về mối quan hệ n-n: theo nguyên tắc mình chuẩn hóa mối quan hệ này thành 1 - n. Ví dụ như mối quan hệ sinh viên và môn học: 1 sinh viên có thể đăng ký nhiều môn học và 1 môn học có nhiều sinh viên đăng ký. Khi đó mình chuẩn hóa như sau:
SV - MH=> SV(1) - (n)Biên lai(n) - (1)MH.
SV có PK là Mã SV, MH có PK là Mã MH. Theo nguyên tắc khi chuẩn hóa mình có thể lấy PK của SV và MH làm PK cho table Biên lai. Như vậy table Biên lai có 2 PK là Mã SV và Mã MH.
Các ACE giúp mình design table Biên lai này với!
Thanks.
Chào David,
Mình xin trả lời câu hỏi của bạn như sau:
1. Về quan hệ 1-n trong OpenERP bạn tạo như vậy là ổn rồi.
2. Về quan hệ n-n thì đúng là bạn cần 1 bảng bao gồm 2 PK là Mã SV và Mã MH để thể hiện quan hệ n-n. Tuy nhiên như thế vẫn chưa đủ, trong trường hợp này ta nên dùng mô hình Master-Details. Cụ thể bạn sẽ có các bảng như sau:
- table SV (danh sách SV)
- table MH (danh sách MH)
- table Biên lai (master) có các trường date, number, SV (many2one).
- table Chi tiết Biên lai (details) có các trường: bienlai_id (many2one), monhoc_id (many2one), đây sẽ là 2 trường PK của table này.
Trên thực tế, 1 biên lai bạn chỉ ghi cho 1 SV và details của nó sẽ là các môn học => 1 SV có nhiều MH. Ngoài ra MH có thể xuất hiện ở nhiều biên lai dành cho các SV khác => 1 môn học có nhiều SV đăng ký.