2011-12-07 16 views
6

Tôi muốn xử lý một tham số ngày trong một kho dữ liệu MySQL. (Tôi là một người mới trong thế giới DW)Sử dụng trường DATE làm khóa chính của một tham số ngày với MySQL

Tôi đã thực hiện một số tìm kiếm với google và thấy rất nhiều cấu trúc bảng (hầu hết) ngày mà Khóa chính là đơn giản UNSIGNED INTEGER.

Tại sao không sử dụng trường DATE làm khóa chính vì MySQL là 3 Bytes VS 4 Bytes cho INTEGER?

Ex:

CREATE TABLE dimDate 
id INTEGER UNSIGNED NOT NULL PRIMARY AUTOI_NCREMENT, 
date DATE NOT NULL, 
dayOfWeek 
... 

VS

CREATE TABLE dimDate 
date DATE NOT NULL PRIMARY, 
dayOfWeek 
... 
+2

Bạn không mong đợi có nhiều bản ghi cho cùng một ngày? – Mat

+1

Không, tôi sẽ mong đợi rất nhiều hồ sơ cho cùng một ngày trong bảng thực tế của tôi không phải là bảng thứ nguyên. – nemenems

+0

Kimball nói mọi kích thước pk phải là một đại diện. –

Trả lời

6

Nếu bạn có một bảng với một cột đó là của date loại và nơi không có hai hàng bao giờ sẽ có cùng ngày, sau đó bạn có thể chắc chắn sử dụng cột này là PRIMARY KEY.

Bạn thấy rất nhiều ví dụ trong đó khóa chính là đơn giản UNSIGNED INTEGER vì có nhiều trường hợp không có ứng viên hoàn hảo cho khóa chính. AUTO_INCREMENT cho phép cột này được tự động điền bởi cơ sở dữ liệu (và là duy nhất) trong khi chèn.

14

Kích thước ngày là loại đặc biệt - có ngày (2011-12-07) hoặc số nguyên liên quan đến ngày (20111207) cho khóa chính thực sự được ưu tiên. Điều này cho phép phân vùng tốt đẹp (theo ngày) của bảng thực tế.

Đối với loại thứ nguyên khác, các khóa thay thế (số nguyên) được khuyến nghị.

Là một mẫu, mỗi chiều thường có mục cho unknown, not entered, error, ... mà thường phù hợp với các phím 0, -1, -2, ...

Do đó, nó là phổ biến hơn để tìm ngày số nguyên định dạng (20.111.207) như là một khóa chính thay vì ngày - có một chút lộn xộn để đại diện cho unknown, not entered, error, ... bằng khóa loại ngày.

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