数据库设计问题

时间:2011-03-20 10:21:48

标签: sql sql-server database database-design

我有很多涉及实体的关系:部门和范围。

1)部门。 (进口,出口)
2)范围。 (全国,国际)

1个部门可以与许多不同的范围相关。一个范围涉及许多部门。

到目前为止,我的多对多关系表将是这样的:

DepartmentId(外键)
ScopeId。 (外键)

每个部门/范围关系将具有完整配置,涉及文档类型和批次代码等。

(所以:

部门1 /范围1 /文件类型1
部门1 /范围1 /文件类型2

然后对于每种文档类型,将会有许多不同的代码:

部门1 /范围1 /文件类型1 /代码1
部门1 /范围1 /文件类型1 /代码2

部门1 /范围1 /文件类型2 /代码1
部门1 /范围1 /文件类型2 /代码2

所以我在考虑将多对多关系表(部门/范围)作为:

Id(自动增量)(主键)
DepartmentID的
ScopeId。

这个“Id”将是另一个表中的外键。

这可以,我正在做什么,还是我打破了一些最佳实践规则?

由于

更新1
我发现我将拥有许多不同的多对多关系表。

1)定义哪个范围与每个部门相关

标识
DepartmentID的
ScopeId

2)与每个部门内每个范围相关的文档类型。

Id(主键,自动增量)
DepartmentScopeId(外键,1)
DocumentTypeId(文档类型的外键)。

3)与每种文件类型相关的代码,属于某个部门的范围。

Id(主键,自动增量)。
CodeName(nvarchar(50))
DocumentTypeDepartmentScopeId(2的外键))。

我不确定我是否过度复杂化,或者这是否是数据库世界中的正常模式。

我想这样做之后我可以创建一个视图,这将有助于我访问数据,例如:按照每个部门,每个文档类型,每个部门返回所有代码“。

如果我能得到一些关于这是否是正确的解决方法的建议,那将会很棒。

由于

1 个答案:

答案 0 :(得分:3)

我也认为这是最好的做法。您还可以在新表中添加有关关系的更多信息(例如,dateCreated,如果有意义的话)。此外,如果它至关重要,请不要忘记将这对(DeparmentId,ScopeId)设置为Unique,以避免重复分配。