假设我想制作一个简单的项目跟踪系统。经理可以创建项目。然后他可以为该项目创建任务。团队成员可以记录他们为每项任务或整个项目工作的时间。
t_timesheet表的以下设计是一个好主意吗?
timesheet_id - primary key, autoincrement
project_id - not null, foreign key constraint to t_project
task_id - nullable, foreign key constraint to t_task
user_id - not null, foreign key constraint to t_user
hours - decimal
或者我应该这样做:
timesheet_id - primary key, autoincrement
task_id - not null, foreign key constraint to t_task
user_id - not null, foreign key constraint to t_user
hours - decimal
在第二个选项中,我打算在t_task中记录一个标记为“杂项”的记录,其中包含相关t_project记录的外键。然后,我将能够跟踪不适用于任何特定任务的项目的所有时间。
以上任何一个想法都不错吗?什么会更好?
答案 0 :(得分:0)
虽然我认为可以为空的外键确实在关系数据库中占有一席之地,但在这种情况下,我倾向于你的第二个选择。
强制项目经理 明确地创造了一个“micellaneous 项目“每个项目的任务将使他们决定是否对有问题的项目有意义。
允许项目经理根据需要调用catch all任务。
只是用户界面,因为不需要任何特殊情况就可以直接为项目分配工作而不是任务。
将使开发人员更容易编写报告,因为他们必须处理不太复杂的数据库模型。