【发布时间】:2014-07-09 09:48:18
【问题描述】:
作为我自己的个人项目,我正在尝试将我们现有的一个 Access 数据库工具重新设计到 VB.net 中。这包括从头开始重新设计数据库,因为当前的数据库绝对是一团糟。
这是我目前在 SQL Server 中重新设计的数据库:
现在要明确关系:
在Client 表中,Client_ID 是主键。这与 Contracts.Client_ID 作为其外键有关系。这也与作为其外键的Sites.Client_ID 有关系。
在Sites 表中,Site_ID 是主键。这与 Contracts.Site_ID 作为其外键有关。
每个表中的每个主键在每次创建记录时都会自动递增 1。
这里的想法是一个简单的客户/站点/合同结构。例如,客户:Microsoft,站点:Reading Head Office,合同(可以适用于整个公司或单个站点的任何类型的合同)。
没有客户就没有网站。您应该能够将合同链接到客户或站点。目前我已经在合同中允许 Site_ID 和 Client_ID 的 Nulls 来促进这一点,因为我找不到任何方法来确保至少填写一个。
此设计是否合理并遵循最佳实践?我尝试按照网络上发现的许多不同建议遵循最佳实践,为不同类型的数据命名分隔表。任何意见将不胜感激
【问题讨论】:
-
如果站点有client id,而合约有site id,则合约不需要client id。
标签: sql sql-server database database-design primary-key