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