创建数据库以恢复员工感受调查的结果

时间:2012-09-10 14:34:19

标签: sql database

我的项目是制作一个软件,让员工逐个询问他们每天的感受,良好,正常,糟糕。例如,在10/9/2012,三名员工感觉良好,四名感觉正常,两名感觉不好。他们有能力说出他们为什么会这样。

我正在考虑创建一个日期表,一对多,另一个表示感觉,好,正常,坏,每天存储多少感觉好/坏/正常。

我的问题是如何做“为什么你觉得这样”表。每种状态都有很多原因。

员工必须是匿名的,所以我不能存储每个人的意见。

3 个答案:

答案 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))