2011-08-16 20 views
1

我一直试图在现有问题中为我的问题找到一个匹配项,并且我会接受链接作为答案并关闭我的问题(如果有的话)。重组现有网站上的表格以存储历史数据?

我想找到的是重构我现有的表的一种方法。我有一个网站,我花了很长时间来研究它。现在我拥有所有的桌子,并选择适当的位置。不幸的是,当用户更新他们的信息时,“名字”“姓氏”表格正在改变很多。我想存储这些字段的历史数据,所以我可以在用户更改它们后按真实姓名查找用户。这些名称并不是唯一的,但它们比ID号码更易于记忆。所以,我有一个成员的表格,其中包含字段(用户名,电子邮件,名字,中间名,家族名,国防部,密码,国家)。我应该为firstname和familyname创建新表,以便我可以存储更改吗?

回答

2

我有类似的问题。我摆脱了这种情况,所以 用这种字段创建了一张表。

| Id | id_user | name_field | value | date | 

我想了很多明确的...“name_field”是用户已经改变了......(名称,国家等) “value”,这是在细胞和“date”当时有一个变化

+0

虽然我不只是希望日期发生变化。我也希望能够按照以前的名字查看用户。 –

+0

什么问题。简单地选择用户ID表以便为您提供所有更改 – Nightw0rk

+0

噢,好吧。那么你如何选择以前的用户名? –

1

我建议答案是YES。为第一个/家族名称添加新字段,并找到一个体面的算法,将“全名”转换为“第一个”和“最后一个”(这里有很多,你甚至可以使用excel

+0

所以增加一个全名字段,删除姓氏字段......但您如何处理历史数据? –

1

只是为了确保我正确地解释你的问题: 您目前没有与该领域 username, email, firstname, middlename, familyname, dob, password, country 一个表,要保存历史记录姓名和familyname列。那是对的吗?如果是这样,我建议在表中添加时间有效性列(valid_from,valid_until),并为每个更改插入新行,将当前记录的“valid_from”设置为now(),并将valid_until设置为null 。您还可以将此用户的最后一行的valid_until列设置为now()。 当前记录是valid_until为空的记录。

这个设计是自我描述的,尽管如果你存储了表中所有字段的变化会更好 - 不仅仅是第一个和姓氏。它还允许您存储密码历史记录。

表会是这样的:

id 
username 
email 
firstname 
middlename 
familyname 
dob 
password 
country 
valid_from 
valid_until 

例如:

id username email firstname familyname ... valid_from valid_until 
----------------------------------------------------------------------------------------------------- 
    1  bob  [email protected] Bob   Smith    1/Jan/2011 null 

当Bob改变了他的姓,这成为

id username email firstname familyname ... valid_from valid_until 
----------------------------------------------------------------------------------------------------- 
    1  bob  [email protected] Bob   Smith    1/Jan/2011 1/Aug/2011 
    1  bob  [email protected] Bob   Brown    1/Aug/2011 null 
+0

那么你是说我应该有一个长表, Id | id_name | name_field | name_value | name_from | name_until | id_lastname | lastname_field | lastname_value | lastname_from | lastname_until |'等等,用于电子邮件,名字,中间名等等? –

+0

向我的回答添加了一个示例 –

+0

但是,主键'id'不再是唯一的。 –