Thiết kế cơ sở dữ liệu cho một ứng dụng theo dõi thời gian


7

Tôi đang thiết kế lược đồ cơ sở dữ liệu cho một ứng dụng theo dõi thời gian và tôi cần một lời khuyên nhỏ. Ứng dụng phải cho phép người dùng nhập vào mỗi ngày trong tuần số lượng thời gian anh ta làm việc cho một dự án cụ thể. Theo ý kiến ​​của bạn, cách tốt nhất để lưu trữ các giá trị này là gì?

Câu trả lời:


11

Hãy xem mô hình Timesheet trên databaseanswers.org. Điều này bao gồm nó độc đáo

Đơn giản, một cái bàn có

  • Ngày
  • Người dùng (Bảng FK đến Người dùng)
  • Dự án (bảng FK đến dự án)
  • Thời gian làm việc

3 cột đầu tiên là PK.

Bây giờ, bạn có muốn:

  • hoạt động đăng nhập, ví dụ Phân tích, Mã hóa, kiểm tra riêng?
  • đăng nhập các giai đoạn dự án riêng biệt?
  • đăng nhập công việc phi dự án, ví dụ đào tạo, ngày lễ (ví dụ: tập trung người dùng hoặc tập trung vào dự án?)
  • ...

Đẹp mẫu gbn, cảm ơn bạn. Tôi không cần phải đăng nhập các giai đoạn dự án hoặc phân tích / mã hóa / thử nghiệm riêng biệt, nhưng tôi cần phải đăng nhập công việc phi dự án.
Psyche

1
Tôi đã xây dựng một vài ứng dụng bảng chấm công trong thời gian của mình và để tôi chỉ cần thêm một điều chỉnh vào đây. Sử dụng cột nhận dạng thay thế cho PK thay vì khóa tổng hợp. Trong mọi hệ thống tôi đã làm việc luôn có nhu cầu liên lạc bên ngoài hệ thống về các mục thời gian cụ thể và việc sử dụng số tham chiếu dễ dàng hơn so với số nhận dạng ba phần sẽ dễ dàng hơn. Ngoài ra, các mục thời gian có xu hướng được tham gia rất nhiều (ví dụ: hóa đơn) và bạn sẽ có hiệu suất tốt hơn khi tham gia vào một trường số nguyên duy nhất.
JohnFx

@JohnFx Tôi hoàn toàn đồng ý. Không có lý do gì để không chỉ đơn giản là thả và int identitycột ở đầu bảng đó.
Nate

1
@JohnFx: sự lựa chọn của khóa tự nhiên hoặc thay thế nằm ngoài phạm vi ở đây. Bạn vẫn sẽ cần một chỉ mục duy nhất trên khóa tự nhiên = nhiều không gian hơn, chi phí hoạt động. Một IDENTITY cũng không có ý nghĩa bên ngoài. Bạn không sai, nhưng điểm của bạn không liên quan đến câu trả lời của tôi ...
gbn

Đó là một tham chiếu đến nhận xét của bạn "Ba cột đầu tiên là PK", chỉ vậy thôi.
JohnFx

2

Trong ứng dụng theo dõi thời gian của chúng tôi , chúng tôi cũng lưu thời gian bắt đầu và kết thúc công việc. Chúng tôi thêm một hàng mới trong cơ sở dữ liệu cho mỗi tác vụ vào một ngày cụ thể và tính tổng trước khi hiển thị. Xem xét nếu thông tin này sẽ hữu ích trong tương lai, nó sẽ rất khó để tích hợp nó sau này. Không quá phức tạp để nhóm các hàng trong một ngày.


1

Tôi sẽ sử dụng bảng tham gia kết nối người dùng với dự án và cũng lưu trữ dữ liệu bổ sung

  user   |    project    |    time     |   date
-------------------------------------------------
    1            39           360        27/09/2011
    2            4            60         27/09/2011
    6            34           500        27/09/2011
    5            34           320        27/09/2011
    12           37           720        27/09/2011
    7            34           50         27/09/2011

Thời gian ở đây tính bằng phút, nhưng cũng có thể tính bằng giây (mặc dù điều đó có thể được thiết kế quá mức).

Tất nhiên, khóa của bạn cho người dùng và dự án có thể khác nhau, nhưng tôi nghĩ bạn hiểu ý tôi.


0

Tôi đã tạo một ứng dụng theo dõi thời gian trước đó cho phép quản trị viên chỉ cập nhật thời gian. Bạn không muốn bất kỳ người dùng nào có thể chỉnh sửa giờ của họ vì gian lận có thể là một vấn đề. Nếu ai đó quên đồng hồ, quản trị viên có thể chỉ cần chỉnh sửa giờ. Tuy nhiên, nếu người dùng có một khách hàng và giờ không phải là của riêng họ, họ có thể chỉnh sửa giờ cho khách hàng mà không phải là nhân viên.

Tôi đã có một bảng người dùng với tên, địa chỉ email, hành động cuối cùng, v.v. của người dùng và một usertimestampbảng với các cú đấm thực tế.

id int auto_increment
user_id int
action -- whether the user has clocked in, out etc.
clock timestamp -- defaults to the current timestamp
notes text -- allow the user to leave notes if they are late
realtime timestamp -- this is the actual time the punch happened before any editing by an administrator for auditing purposes
ipaddress varchar(255) -- prevent the user from clocking in or out from a place other than designated unless authorized to clock in from anywhere

Đây chỉ đơn giản là cái usertimestampbàn, nhưng tôi nghĩ đó là tất cả những gì bạn đang thực sự tìm kiếm. Tôi cũng có IP được phép, bảng công ty (vì họ có thể nhập danh sách IP), khách hàng cho một công ty (tách biệt với nhân viên) và dấu thời gian của khách hàng để theo dõi thời gian của khách hàng để lập hóa đơn cho các công ty riêng biệt mà bạn có thể xem xét thêm dựa trên bạn cần.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.