私は正しい軌道に乗っていると思いました。ユーザーが複数のアクティビティを実行できることを忘れていました。私がしたことは、それがたった1つの活動だったということです。これで何ができますか?テキストを上書きせずにアクティビティ列を更新するSQLステートメントを考え出して、うまくいくかもしれない解決策を思いつきました。しかし、それはばかげているようです。より良い解決策があると確信していますか?
2 に答える
http://www.c-sharpcorner.com/uploadfile/nipuntomar/normalization-and-its-types/
あなたがやろうとしていることは、データベースの正規化と呼ばれています。1つの特定のレコードに対するメタデータが必要です。だからあなたの問題を「ちらっと見ている」だけです。ストレージ用のテーブル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
多少の調整を行いましたが、これによりデータベースが改善されると思います。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 句を省略します。