Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để tạo bảng lịch trình cho người hướng dẫn từ các bảng đã tạo

Bảng cho báo cáo này

Báo cáo này chỉ hoạt động nếu 'Michel' xác định được một người hướng dẫn. Nếu không, bạn cần nhiều báo cáo phụ cho một giao điểm giữa các ngày trong tuần hoặc bạn cần nhiều báo cáo.

Mỗi báo cáo phụ không để trống tại một hàng và cột trong báo cáo của bạn cho bạn biết:instructor Michel teaches course C in classroom CR to section S for department D .

Vì vậy, báo cáo cho bạn biết điều tương tự về tổng thể như một bảng chứa các hàng nơi:instructor Michel teaches course C in classroom CR to section S for department D in timeslot TS on weekday WD . Lưu ý cách chúng tôi lấy từng cột và hàng của báo cáo đa chiều như thế này và thêm cột cho báo cáo đó vào bảng cho mỗi báo cáo phụ đa chiều nơi chúng giao nhau.

Có thể bạn muốn một bảng cho bạn biết điều tương tự như tất cả các báo cáo cho tất cả người hướng dẫn:instructor I teaches course C in classroom CR to section S for department D in timeslot TS on weekday WD . Lưu ý cách chúng tôi lấy một tham số trong tiêu đề và thêm một cột cho nó vào bảng.

(Bây giờ chúng ta không cần phải lo lắng về việc liệu Michel có xác định được một người hướng dẫn hay không.)

Thiết kế đầu tiên cho báo cáo này

Tên người hướng dẫn có thể không phải là duy nhất hoặc không cố định. Vì vậy, hãy thêm id vào tên và tiêu đề báo cáo. Bạn có thể có nhiều dữ liệu hơn về người hướng dẫn, khóa học và phòng ban. Vì vậy, có bảng cho chúng. Rõ ràng số phần chỉ là duy nhất trong một khóa học.

-- instructor ID is named NAME and ...
Instructor(id, name, ...)
    CK(id)
-- course NAME ...
Course(name, ...)
    CK (name)
-- department NAME ...
Department(name, ...)
    CK (name)
-- course C_NAME has section S_NUMBER
Course_Has_Section(C_name, S_number)
    CK (C_name, S_number)
    FK(C_name) to Course
-- instructor I_id teaches course C_NAME in classroom CR_NAME to section S_NUMBER 
--     for department D_NAME in timeslot TS_NAME on weekday WD_NAME
Weekly_Lecture(I_id, C_name, CR_name, S_number, D_name, TS_name, WD_name)
    FK(I_id) to Instructor
    FK(C_name, S_number) to Course_Has_Section
    FK(D_name) to Department

Chi tiết thiết kế của bạn sẽ khác nhau. Có thể các khóa học và / hoặc phòng ban có mã duy nhất. Sau đó, bạn có thể sử dụng chúng như FK. Sau đó, thêm một bảng. Rõ ràng một phần có thể đang hoạt động, bất kể điều đó có nghĩa là gì.

CK và chuẩn hóa

Một người hướng dẫn cụ thể, thời gian biểu &ngày trong tuần chỉ có thể có một bài giảng hàng tuần. Nhưng không có tập con nhỏ hơn trong số đó. Vì vậy, chúng tôi có Weekly_Lecture CK(I_id, TS_name, WD_name) . Một khóa học, phần, thời gian biểu và ngày trong tuần nhất định chỉ có thể có một bài giảng hàng tuần. Nhưng không có tập con nhỏ hơn trong số đó. Vì vậy, chúng tôi có Weekly_Lecture CK(C_name, S_number, TS_name, WD_name) . Một lớp học, khung thời gian và ngày trong tuần nhất định chỉ có thể có một bài giảng hàng tuần. Nhưng không có tập con nhỏ hơn trong số đó. Vì vậy, chúng tôi có Weekly_Lecture CK(CR_name, TS_name, WD_name) .

Có lẽ một khóa học nhất định chỉ có thể được giảng dạy cho một bộ phận? Có thể một số phần nhất định chỉ có thể được dạy bởi một người hướng dẫn nhất định? Bằng cách xác định tất cả FD (phụ thuộc chức năng), chúng tôi xác định tất cả CK (khóa ứng viên). Sau đó, chuẩn hóa sử dụng chúng để có thể đề xuất các lựa chọn "tốt hơn" cho các bảng cơ sở.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server so với NoSQL

  2. Trả về danh sách các bảng &chế độ xem trong SQL Server bằng T-SQL (sp_tables)

  3. HOẶC không được hỗ trợ với Câu lệnh CASE trong SQL Server

  4. SSMS phiên bản 18 - không có Sơ đồ cơ sở dữ liệu

  5. Cách tạo tệp văn bản bằng script sql với văn bản |