-2

我的项目是制作一个软件来单独询问员工每天的感受,好、正常、坏。例如,在 2012 年 10 月 9 日,三名员工感觉良好,四名感觉正常,两名感觉不好。他们有能力说出他们为什么会这样。

我正在考虑为约会创建一张表,一对多,另一张用于感觉,好,正常,坏,存储每天有多少感觉好/坏/正常。

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

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

4

3 回答 3

1

对于这样的事情,我会使用带有 theDate、Feeling、Reason 和 CookieValue 的单个表。(使用 cookie 来防止一名员工感觉不好 18 次)。每天你都会有一堆条目。

然后,老板页面将在此表上进行选择,按日期分组,并显示计数。也许Select distinct feeling, count(*) as numCount where theDate = getdate() group by feeling


如果您真的想要多个表,那么您可能希望实现多对多连接的中间。为此,有一个具有主键 (pkDateTable) 和 theDate 的表,具有主键 (pkFeeling) 和感觉选项的第二个表,然后创建具有两个外键 (pkDateTable, pkFeeling) 和原因的第三个表. 我不会这样做(对于这个例子来说太复杂了),但问题可能还有更多。

于 2012-09-10T14:48:01.480 回答
1

这会有点复杂,因为您无法存储实际用户的识别信息。我的建议是执行以下操作:

1 - 为“感觉”创建一个表,其中仅包含用户可以选择的所有可用感觉的列表(可能类似于“好”、“好”、“好的”、“不好”、“坏”或任何组合你想要)。给这个表一个唯一的递增标识和一个 varchar(25) 来描述感觉。所以你的桌子看起来像这样:

Feelings
    id (int, identity)
    description (varchar(25))

2 - 为“用户”创建一个表,其中包含与所选密码合并的电子邮件的 MD5 或 SHA-2 哈希。这样您就不会存储他们的实际用户信息。还要给这个表一个唯一的递增标识。您的用户表应类似于:

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 + 设置为唯一约束,那么您就不应该在数据库中出现任何冲突,一切都应该很好!

于 2012-09-10T14:55:33.967 回答
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))
于 2012-09-10T14:52:26.857 回答