我以为自己走在正确的轨道上。我忘了用户可以做多个活动。我所做的只是一项活动。我该怎么办?我提出了一个可能有效的解决方案,提出了一个更新活动列而不会覆盖文本的sql语句。但这似乎很愚蠢。很确定这是一个更好的解决方案吗?
答案 0 :(得分:0)
http://www.c-sharpcorner.com/uploadfile/nipuntomar/normalization-and-its-types/
您要做的是称为数据库规范化。您希望元数据针对一个特定记录。所以只是“瞥一眼”你的问题。创建一个用于存储的表,X和一个对要描述的数据记录具有外键约束。在这种情况下,它看起来像users表,然后在这个X表中有字段,它存储与users表相关的'multiple data'类型。
表
users -- table
id
username
password
status
updation_date
creation_date
x -- table
id
users_id -- foreign key constraint
part1_of_multiple_data -- meta log data you are wanting
part2_of_multiple_data -- meta log data you are wanting
part3_of_multiple_data -- add more fields as you need in the table.
updation_date
creation_date
答案 1 :(得分:0)
我做了一些调整,但我认为这会改善您的数据库。通过http://sqlfiddle.com/#!2/c6546/9/0
查看此操作CREATE TABLE workers
(
id_workers int primary key,
username varchar(30),
type varchar(30)
);
CREATE TABLE activities
(
id_activities int auto_increment primary key,
activity varchar(30)
);
CREATE TABLE timesheet
(
id_timesheet int auto_increment primary key,
id_workers int,
id_activities int,
start_time datetime,
end_time datetime
);
INSERT INTO workers
(id_workers, username, type)
VALUES
('1','Danice', 'Administrator'),
('2','Micheal', 'Administrator');
INSERT INTO activities
(activity)
VALUES
('Edit Employee'),
('Edit Employee Information'),
('Edit Department');
INSERT INTO timesheet
(id_workers, id_activities,start_time, end_time)
VALUES
('1', '1', '2013-03-14 13:15:00','2013-03-14 13:20:00'),
('2', '2', '2013-03-14 13:00:00','2013-03-14 14:00:00'),
('1', '2', '2013-03-14 13:21:00','2013-03-14 13:23:00'),
('1', '3', '2013-03-14 13:24:00','2013-03-14 13:45:00');
SELECT a.id_activities, w.username, w.type, a.activity, t.start_time, t.end_time
FROM (timesheet AS t LEFT JOIN activities AS a ON t.id_activities = a.id_activities ) LEFT JOIN workers AS w ON t.id_workers = w.id_workers;
如果你想从数据库布局中获得一个很好的概述,你可以使用MYSQL工作台。在工作台中设置架构以供编码时参考。或者只使用笔和纸。 ; - )
关于您的审计跟踪,您可以通过向时间表添加和添加列(例如audittrail),为工作人员提供从时间表中删除活动的选项。默认情况下,列audittrail设置为0,如果工作人员删除其条目,则为此列提供值1.然后添加SELECT查询“WHERE audittrail = 0”以显示所有时间表条目。如果您需要审计跟踪,则省略WHERE子句。