我以为我在正确的轨道上。我忘记了用户可以进行多项活动。我所做的只是一项活动。我能用这个做什么?我提出了一个可行的解决方案,提出了一个更新活动列而不覆盖文本的 sql 语句。但这似乎很愚蠢。很确定有更好的解决方案吗?
问问题
490 次
2 回答
0
http://www.c-sharpcorner.com/uploadfile/nipuntomar/normalization-and-its-types/
您正在尝试做的事情称为数据库规范化。您需要针对一条特定记录的元数据。所以只是“瞥一眼”你的问题。制作一个用于存储的表,X,并且对要描述的数据记录有一个外键约束。在这种情况下,它看起来像 users 表,然后在这个 X 表中有字段,它存储与 users 表相关的“多数据”类型。
表
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
于 2013-01-14T03:06:30.443 回答
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 列设置为 0,如果工作人员删除了他的条目,则为该列指定值 1。然后向您添加 SELECT 查询“WHERE audittrail = 0”以显示所有时间表条目。如果您需要审计跟踪,则省略 WHERE 子句。
于 2013-01-14T11:30:05.847 回答