2010-10-02 33 views
5

Giả sử tôi có Tutors người mất online webclasses và tạo learning packs. Cả hai online webclasseslearning packs đều có thể được xếp hạng theo số students và cuối cùng là xếp hạng tutor's là mức trung bình đơn giản của tất cả các xếp hạng trên số classespacks của bạn.Mysql - Một câu hỏi thiết kế cơ sở dữ liệu đơn giản

Đây là kiến ​​trúc bảng Ratings bảng hiện tại của chúng ta -

CREATE TABLE IF NOT EXISTS `Ratings` (
    `id_rating` int(10) unsigned NOT NULL auto_increment, 
    `id_teacher` int(10) unsigned default NULL COMMENT 'the teacher who created the class/pack', 
    `id_lp` int(10) unsigned default NULL COMMENT 'the id of the learning pack', 
    `id_wc` int(10) NOT NULL default '0' COMMENT 'the id of the webclass', 
    `id_user` int(10) unsigned NOT NULL default '0' COMMENT 'the user who has rated', 
    `rate` int(10) unsigned NOT NULL default '0', 
    `cdate` timestamp NOT NULL default CURRENT_TIMESTAMP, 
    `udate` timestamp NULL default NULL, 
    PRIMARY KEY (`id_rating`), 
    KEY `Ratings_FKIndex1` (`id_user`), 
    KEY `id_lp` (`id_lp`), 
    KEY `id_wc` (`id_wc`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

Hiện nay, cả lớp và đóng gói xếp hạng được nhập vào cùng một bảng (id_wcid_lp được nhập phù hợp - một được nhập và thứ hai là NULL cho mọi bản ghi xếp hạng).

Vì vậy, câu hỏi của tôi là -
là kiến ​​trúc này đúng hay là nó tốt hơn để giữ classpack xếp hạng riêng biệt? Tại sao hay tại sao không? Tôi cần chính xác số lượng cùng một trường Rating bảng cho cả hai xếp hạng classpack.

Tôi đoán, Nếu xếp hạng lớp học và gói được tìm thấy riêng, thì các bảng riêng biệt sẽ giảm số lượng bản ghi được tìm kiếm. Tuy nhiên, vì trong trường hợp của chúng tôi chỉ cần có các xếp hạng gia sư (bao gồm cả lớp học và các gói), đó là lý do tại sao tất cả các xếp hạng được xếp vào nhau.

+0

Sử dụng bàn làm việc mySQL thậm chí nó được tạo bởi các nhà phát triển mysql. –

Trả lời

0

Nếu bạn nghĩ rằng bạn sẽ kết thúc với nhiều thực thể hơn sẽ yêu cầu xếp hạng thì bạn cần tạo một thứ gì đó chung chung hơn (chứ không phải rất thân thiện với db-triết lý).

ratings 
------- 
id 
voterClass 
voterId 
subjectClass 
subjectId 
vote 
date(s) 

Bằng cách sử dụng thiết kế này, bạn quên FK và tính toàn vẹn tham chiếu. Nhưng nó rất linh hoạt và sử dụng các chỉ mục phù hợp, nó rất dễ mở rộng. Ngoài ra, khi thực thể (đối tượng) bị xóa thì phiếu bầu vẫn còn. Thiết kế này giúp bạn không bị sao chép các trường và bảng.

3

Mô hình chi tiết hơn một chút.

  • Giáo viên tại trường đại học cũng có thể tham gia các lớp học.
  • Một lớp học có thể có nhiều giáo viên.
  • Có thể có nhiều lớp học cùng chủ đề, được giảng dạy bởi các giáo viên khác nhau.
  • Chỉ những sinh viên tham gia vào các lớp mới được bỏ phiếu (xếp hạng) lớp học.
  • Gói học tập là về một chủ đề (toán học, sinh học).
  • Một gói học tập có thể có một số tác giả.
  • Về mặt kỹ thuật, sinh viên cũng có thể tạo ra một gói học tập.
  • Chỉ những thành viên sử dụng gói học tập mới có thể xếp hạng gói.
  • Mặc dù tác giả có thể bỏ phiếu cho các gói và giáo viên có thể bỏ phiếu cho các lớp học của họ, những phiếu bầu đó sẽ bị bỏ qua.

alt text

Nếu chỉ quan tâm đến bảng xếp hạng, bạn có thể sử dụng:

alt text

Hoặc kết hợp cả hai mô hình thành một cái gì đó như:

alt text

+0

cảm ơn bạn đã trả lời những bức ảnh đẹp này nhưng bạn có thể giải thích một chút về kiến ​​trúc này tốt hơn không. Tôi chỉ quan tâm đến bảng xếp hạng và chỉ tối đa hệ thống mà tôi đã mô tả (chỉ những thực thể đó - người dạy kèm, lớp và gói). –

0

Sử dụng mySQL workbench. Nền tảng của nó và hoạt động rất tốt.

MySQL workbench visurally see what you are doing with your database. http://diariolinux.com/wp-content/uploads/2008/08/wb51linuxpreview2a.png

MySQL Workbench cũng đáp ứng tất cả các tiêu chí của bạn cho general-purpose-remote-data-backup-and-download-including-innodb-support câu hỏi về stackoverflow

BTW: Sử dụng <ctrl>+<G> để chuyển tiếp kỹ sư cơ sở dữ liệu.

+0

@ JamesM-SiteGen- Thật ra tôi đã yêu cầu một mẹo thiết kế cơ sở dữ liệu/ý tưởng ở đây. Công cụ bạn đề xuất có thể hữu ích nói chung nhưng tôi không thể xem nó trực tiếp trả lời câu hỏi của tôi như thế nào. Nếu bạn có thể xây dựng một chút? Bạn có thể xem xét việc đặt đây làm giải pháp cho http://stackoverflow.com/questions/4710954/general-purpose-remote-data-backup-and-download-including-innodb-support câu hỏi. –

+0

Chắc chắn đã xong .. –

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