我的项目是制作一个软件来单独询问员工每天的感受,好、正常、坏。例如,在 2012 年 10 月 9 日,三名员工感觉良好,四名感觉正常,两名感觉不好。他们有能力说出他们为什么会这样。
我正在考虑为约会创建一张表,一对多,另一张用于感觉,好,正常,坏,存储每天有多少感觉好/坏/正常。
我的问题是如何做“为什么你会这样”表。每种状态都有很多原因。
员工必须是匿名的,所以我不能存储每个人的意见。
对于这样的事情,我会使用带有 theDate、Feeling、Reason 和 CookieValue 的单个表。(使用 cookie 来防止一名员工感觉不好 18 次)。每天你都会有一堆条目。
然后,老板页面将在此表上进行选择,按日期分组,并显示计数。也许Select distinct feeling, count(*) as numCount where theDate = getdate() group by feeling
如果您真的想要多个表,那么您可能希望实现多对多连接的中间。为此,有一个具有主键 (pkDateTable) 和 theDate 的表,具有主键 (pkFeeling) 和感觉选项的第二个表,然后创建具有两个外键 (pkDateTable, pkFeeling) 和原因的第三个表. 我不会这样做(对于这个例子来说太复杂了),但问题可能还有更多。
这会有点复杂,因为您无法存储实际用户的识别信息。我的建议是执行以下操作:
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 + 设置为唯一约束,那么您就不应该在数据库中出现任何冲突,一切都应该很好!
这是我将如何设置它:
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))