我的项目是制作一个软件,让员工逐个询问他们每天的感受,良好,正常,糟糕。例如,在10/9/2012,三名员工感觉良好,四名感觉正常,两名感觉不好。他们有能力说出他们为什么会这样。
我正在考虑创建一个日期表,一对多,另一个表示感觉,好,正常,坏,每天存储多少感觉好/坏/正常。
我的问题是如何做“为什么你觉得这样”表。每种状态都有很多原因。
员工必须是匿名的,所以我不能存储每个人的意见。
答案 0 :(得分:1)
对于类似这样的事情,我会使用带有日期,感觉,理性和CookieValue的单个表格。 (使用cookie来防止一名员工感觉不好18次)。每天你都有一堆条目。
然后,老板页面将在此表上进行选择,按日期分组,&显示计数。也许是Select distinct feeling, count(*) as numCount where theDate = getdate() group by feeling
如果你真的想要多个表,那么你可能希望实现多对多连接的中间。要做到这一点,有一个表与主键(pkDateTable)和theDate,第二个表与主键(pkFeeling)和感觉选择,然后创建一个第三个表有两个外键(pkDateTable,pkFeeling)和原因。我不会这样(这个例子太复杂了),但也许问题还有更多。
答案 1 :(得分:1)
这会有点复杂,因为您无法存储实际用户的识别信息。我的建议是做以下事情:
1 - 为“感觉”创建一个表,其中包含用户可以选择的所有可用感受的列表(可能类似于“Great”,“Good”,“Okay”,“Not Good”,“Bad”或者你想要的任何组合)。为此表提供一个唯一的递增标识,并为该感觉的描述提供varchar(25)。所以你的表格看起来像这样:
Feelings
id (int, identity)
description (varchar(25))
2 - 为“用户”创建一个表,其中包含与所选密码合并的电子邮件的MD5或SHA-2哈希值。这样您就不会存储他们的实际用户信息。同时为此表提供唯一的递增标识。您的usertable应该类似于:
Users
id (int, identity)
userhash (varchar(64))
3 - 通过创建一个包含Feelings.id和Users.id作为外键的表以及一个日期字段和一个描述“为什么”的字段,将它们作为一种关系组合在一起。我会这样做:
UserFeelings
id (int)
user_id (int, fkey to Users.id)
feeling_id (int, fkey to Feelings.id)
when (date)
why (varchar(max))
只要你在一个唯一约束时创建user_id +,那么你就不应该在数据库中出现任何冲突,一切都应该好了!
答案 2 :(得分:0)
以下是我的设置方法:
CREATE TABLE feelings (
feeling_id tinyint PRIMARY KEY,
feeling_type varchar(15))
INSERT INTO feelings (feeling_id, feeling_type) VALUES
(3, 'Good'), (2, 'Normal'), (1, 'Bad')
通过给出“感受”权重(3 =好,1 =差),您可以更轻松地计算整体'情绪'。
CREATE TABLE feeling_entry (
entry_id int PRIMARY_KEY,
entry_date date,
entry_feeling_id tinyint))
此表将记录日期和feeling_id
引用表feelings
。
CREATE TABLE feeling_entry_reason (
entry_id int PRIMARY KEY,
entry_reason varchar(255))
出于感觉原因添加表格是有益的,因为每种记录的感觉都可能没有原因。
最后,您应该有一种跟踪用户提交表单的方法,以防止重复的“否定”反馈。您的脚本只会检查该用户是否已为该日期创建条目。它与实际条目不对应。
CREATE TABLE feeling_submit (
user_id int,
entry_date date,
PRIMARY KEY (user_id, entry_date))