Database design 表结构和验证

Database design 表结构和验证,database-design,ms-access-2010,Database Design,Ms Access 2010,我有一个表雇员,希望得到定义主键/表的建议。最初,我希望将EMP ID字段作为主键,但随后我还希望跟踪员工的所有更改-TL Name。此表应只允许一个唯一的活动EMP ID,但可以允许多个非活动EMP ID。请建议 下面是表的示例结构 +----+--------+----------+---------+-----------+ | ID | EMP ID | EMP Name | TL Name | Is Active | +----+--------+----------+--------

我有一个表雇员,希望得到定义主键/表的建议。最初,我希望将
EMP ID
字段作为主键,但随后我还希望跟踪员工的所有更改-
TL Name
。此表应只允许一个唯一的活动
EMP ID
,但可以允许多个非活动
EMP ID
。请建议

下面是表的示例结构

+----+--------+----------+---------+-----------+
| ID | EMP ID | EMP Name | TL Name | Is Active |
+----+--------+----------+---------+-----------+
| 1  | Z001   | Raj      | Vik     | No        |
+----+--------+----------+---------+-----------+
| 2  | Z002   | Ajay     | Peter   | No        |
+----+--------+----------+---------+-----------+
| 3  | Z001   | Raj      | Ashish  | No        |
+----+--------+----------+---------+-----------+
| 4  | Z003   | Soni     | Suresh  | Yes       |
+----+--------+----------+---------+-----------+
| 5  | Z001   | Raj      | Vinod   | Yes       |
+----+--------+----------+---------+-----------+
i) 若您在表中设置了活动规则,那个么EmpID不能是主键。您需要通过代码设置它

ii)如果您删除了IsAcTive规则,那么我认为EmpID是通过代码生成的,然后在同一代码中您可以放置一个过滤器。因此,将其作为主键没有意义

最好让它成为CI。 iii)将ID设为PK

iv)它们中的许多遵循相同的设计模式。如果该表将增长到数百万条记录,并且在搜索和连接中非常频繁地使用,那么这绝对是一个糟糕的设计

如果是这种情况,则保留单独的变更表并删除审计列

v) 即使您的表很小,那么它的设计也很糟糕。您必须为在所有查询中写入isAtive='YES'付出代价


vi)虽然保持单独的表只需要很少的代码和维护,但这是值得的。

将Id设为主要,并使用此Id作为外键的更改创建另一个表,并在此新表上添加更改日期列。在同一个表中有数据的历史记录是一个糟糕的设计。@JorgeCampos有没有指导如何管理父表和更改表的参考链接?非常感谢。这里有一个问题:是Sql server还是ms access?非常不同的产品…@Zoharpel将其用于MS Access