Cơ sở dữ liệu mẫu

Cơ Sở Dữ Liệu Mẫu
Cơ Sở Dữ Liệu Mẫu

Để chuẩn bị cho các bài viết về Cơ Sở Dữ Liệu, điều khiến mình băn khoăn nhất chính là tìm kiếm một dữ liệu mẫu. Nó phải có tính thực tế và đủ lớn.

Giới thiệu

Để loạt bài viết này trở nên thực tế và hấp dẫn nhất có thể. Mình đã loay hoay một thời gian để tìm kiếm một CSDL tốt. Và để tìm kiếm được CSDL như mong đợi, mình đã đề xuất một số tiêu chí:

Thực tế

  • CSDL phải có tính thực tế và ứng dụng cao. Khác hoàn toàn với những CSDL của các bạn học ở trường học ‘Quản Lý Bán Hàng’, ‘Quản Lý Học Vụ’ …vv
  • Một CSDL thực tiễn có thể dễ dàng kiếm. Mình có thể lấy bất kỳ CSDL của một dự án nào đó tại công ty. Nhưng các vấn đề về kinh tế (bảo mật dữ liệu, bản quyền…vv) không cho phép mình làm như vậy. Đã có lúc, mình suy nghĩ theo hướng chỉ lấy cấu trúc, dữ liệu mình sẽ làm giả. Nhưng như vậy, dữ liệu sẽ không nhiều, mang tính chủ quan và lại trở lại bài toán tẻ nhạt, phi thực tế.

Đủ lớn

Đây là một yếu tố quan rất quan trọng. Một CSDL đủ lớn sẽ cho các bạn thấy sự khác biệt giữa các hệ CSDL và dữ liệu được lưu trữ trong flat file. Đủ lớn, để các bạn cảm nhận được sự quan trọng của các phương thức TOP, GROUP BY…vv

IMDb

Sau nhiều ngày tìm kiếm, IMDb là ứng viên số một của mình. Tuy nhiên, khi triển khai thì IMDb quá lớn so với mong đợi. Sẽ có nhiều vấn phát sinh khi chúng ta xử lý một CSDL kích thước như vậy. Do đó, IMDb sẽ là ứng cử viên số 1 nếu loạt bài về CSDL (SQLServer) nâng cao được ra đời.

Chinook

Vậy là tiếp tục tìm kiếm, trời không phụ lòng người. Mình đã tìm thấy một CSDL khá hấp dẫn, mô tả về một cửa hàng bán nhạc (các bạn có thể hình dung giống như mp3.zing, nhaccuatui hay spotify). Để mọi thứ hấp dẫn nhẫn có thể (tránh trường hợp các bạn mất kiên nhẫn, tìm đến trang chủ của nó để tìm đáp án) mình sẽ không cung cấp nhiều thông tin về CSDL này. Thay vào đó, mình sẽ cung cấp các mô tả chi tiết về CSDL, các scripts hỗ trợ nhập liệu…vv Cuối cùng, qua từng bài viết, với những kiến thức mới. Chúng ta sẽ từng bước, từng bước khám phá dữ liệu trong CSDL này.

Mô tả CSDL

Cơ sở dữ liệu mẫu được mô tả trong biểu đồ bên dưới.

Biểu đồ dữ liệu Chinook
Biểu đồ dữ liệu Chinook

Dựa vào biểu đồ này, chúng ta có thể dễ dàng hình dung được các đối tượng và thông tin chi tiết của chúng. Như mình đã giới thiệu trong các bài viết trước. Ở loạt bài cơ bản này, chúng ta sẽ không quá tập trung vào vấn đề thiết kế và tối ưu CSDL. Do đó, cấu trúc các bảng dữ liệu, kiểu dữ liệu và kích thước dữ liệu của từng thuộc tính chúng ta sẽ giữ nguyên theo bản gốc của nó.

Dưới đây, mình sẽ mô tả chức năng của từng bảng dữ liệu. Mô tả các thuộc tính và kiểu dữ liệu của chúng.

Album

Lưu trữ các album nhạc.

Các thuộc tính
  • AlbumId – INT – NOT NULL
  • Title – NVARCHAR(160) – NOT NULL
  • ArtistId – INT – NOT NULL
RBTV
  • AlbumId – PRIMARY KEY
  • ArtistId – FOREIGN KEY – Tham chiếu đến bảng Artist(ArtistId)

Artist

Lưu thông tin nghệ sĩ.

Các thuộc tính
  • ArtistId – INT – NOT NULL
  • Name – NVARCHAR(120) – NOT NULL
RBTV
  • ArtistId -PRIMARY KEY

Track

Lưu thông tin các bài hát.

Các thuộc tính
  • TrackId – INT – NOT NULL
  • Name – NVARCHAR(200) – NOT NULL
  • AlbumId – INT
  • MediaTypeId – INT – NOT NULL
  • GenreId – INT
  • Composer – NVARCHAR(220)
  • Milliseconds – INT – NOT NULL
  • Bytes – INT
  • UnitPrice – NUMERIC(10, 2) – NOT NULL
RBTV
  • TrackId – PRIMARY KEY
  • AlbumId – FOREIGN KEY – Tham chiếu đến bảng Album(AlbumID)
  • MediaTypeId – FOREIGN KEY – Tham chiếu đến bảng MediaType(MediaTypeId)
  • GenreId – FOREIGN KEY – Tham chiếu đến bảng Genre(GenreId)

Genre

Lưu trữ thông tin các thể loại nhạc.

Các thuộc tính
  • GenreId – INT – NOT NULL
  • Name – NVARCHAR(120)
RBTV
  • GenreId – PRIMARY KEY

MediaType

Lưu trữ thông tin định dạng bài nhạc.

Các thuộc tính
  • MediaTypeId – INT – NOT NULL
  • Name – NVARCHAR(120)
RBTV
  • MediaTypeId – PRIMARY KEY

PlaylistTrack

Lưu trữ thông tin của của các playlist. Do 2 đối tượng PlaylistTrack có quan hệ n-n. Nghĩa là 1 track có thể thuộc nhiều playlist và một playlist cũng có thể chứa nhiều track. Đây là một trong những kỹ thuật thiết kế CSDL.

Các thuộc tính
  • PlaylistId – INT – NOT NULL
  • TrackId – INT – NOT NULL
RBTV
  • PlaylistId – PRIMARY KEY
  • TrackId – PRIMARY KEY
  • PlaylistId – FOREIGN KEY – Tham chiếu đến bảng Playlist(PlaylistId)
  • TrackId – FOREIGN KEY – Tham chiếu đến bảng Track(TrackId)

Playlist

Lưu trữ thông tin playlist.

Các thuộc tính
  • PlaylistId – INT – NOT NULL
  • Name – NVARCHAR(120)
RBTV
  • PlaylistId – PRIMARY KEY

Employee

Lưu trữ thông tin nhân viên.

Các thuộc tính
  • EmployeeId – INT – NOT NULL
  • LastName – NVARCHAR(20) – NOT NULL
  • FirstName – NVARCHAR(20) – NOT NULL
  • Title – NVARCHAR(30)
  • ReportsTo – INT
  • BirthDate – DATETIME
  • HireDate – DATETIME
  • Address – NVARCHAR(70)
  • City – NVARCHAR(40)
  • State – NVARCHAR(40)
  • Country – NVARCHAR(40)
  • PostalCode – NVARCHAR(10)
  • Phone – NVARCHAR(24)
  • Fax – NVARCHAR(24)
  • Email – NVARCHAR(60)
RBTV
  • EmployeeId – PRIMARY KEY
  • ReportsTo –  FOREIGN KEY – Tham chiếu đến bảng Employee(EmployeeId)

Customer

Lưu trữ thông tin khách hàng.

Các thuộc tính
  • CustomerId – INT – NOT NULL
  • FirstName – NVARCHAR(40) – NOT NULL
  • LastName – NVARCHAR(20) – NOT NULL
  • Company – NVARCHAR(80)
  • Address – NVARCHAR(70)
  • City – NVARCHAR(40)
  • State – NVARCHAR(40)
  • Country – NVARCHAR(40)
  • PostalCode – NVARCHAR(10)
  • Phone – NVARCHAR(24)
  • Fax – NVARCHAR(24)
  • Email – NVARCHAR(60) – NOT NULL
  • SupportRepId – INT
RBTV
  • CustomerId – PRIMARY KEY
  • SupportRepId – FOREIGN KEY – Tham chiếu đến bảng Employee(EmployeeId)

Invoice

Lưu trữ thông tin hóa đơn.

Các thuộc tính
  • InvoiceId – INT – NOT NULL
  • CustomerId – INT – NOT NULL
  • InvoiceDate – DATETIME – NOT NULL
  • BillingAddress – NVARCHAR(70)
  • BillingCity – NVARCHAR(40)
  • BillingState – NVARCHAR(40)
  • BillingCountry – NVARCHAR(40)
  • BillingPostalCode – NVARCHAR(10)
  • Total – NUMERIC(102) – NOT NULL
RBTV
  • InvoiceId – PRIMARY KEY
  • CustomerId – FOREIGN KEY – Tham chiếu đến bảng Customer(CustomerId)

InvoiceLine

Lưu trữ thông tin chi tiết hóa đơn.

Các thuộc tính
  • InvoiceLineId – INT – NOT NULL
  • InvoiceId – INT – NOT NULL
  • TrackId – INT – NOT NULL
  • UnitPrice – NUMERIC(102) – NOT NULL
  • Quantity – INT – NOT NULL
RBTV
  • InvoiceLineId – PRIMARY KEY
  • InvoiceId – FOREIGN KEY – Tham chiếu đến bảng Invoice(InvoiceId)
  • TrackId – FOREIGN KEY – Tham chiếu đến bảng Track(TrackId)

Trong bài định nghĩa dữ liệu, chúng ta sẽ cùng nhau tìm hiểu cú pháp và bắt đầu viết mã T-SQL để định nghĩa các bảng dữ liệu.