我建立一个数据库系统,并与我的表之一的设计麻烦。

在此系统中有一个用户表,对象表中,项目表和成本表。

在成本表中的唯一记录是由用户,对象,项目和年确定。但是,可以是具有同年多个记录,如果该项目是不同的。

在层次进入用户>对象 - >用品 - >一年,每件多独特年,每个对象有多个独特的项目,每个用户的多个唯一对象,多个独立用户。

什么是设计成本表的最佳方式?

我想包括用户ID,OBJECTID的和为itemid作为外键,然后使用由用户ID,objecid,的itemid和costyear复合键。我听说,组合键是不好的设计,但我不能确定如何构建这个从使用复合键脱身。正如你可以告诉我的数据库建设技能都有点生疏了。

谢谢!

P.S。如果它的事项,这是一个interbase的分贝。

有帮助吗?

解决方案

要避免在复合键,你只定义了代理密钥。这适用人工值,例如一个自动计数器。

您仍可以(也应该)在这些列上定义一个唯一的约束。

顺便说一句:其不仅建议不使用复合密钥,它也推荐使用代理键。在所有的表。

其他提示

使用内部产生的键字段(称为代理键),像CostID,使用户永远不会看到,但会唯一标识成本表中的每个条目(在SQLSERVER,像唯一标识符或身份会做的伎俩领域。)

尝试使用正是你列出列复合键建立数据库,看看会发生什么。你可能会感到惊喜。确保有那些四列没有丢失数据,并确保没有两行在所有四列相同的值将帮助保护您的数据的完整性。

当你宣布一个复合主键,列在申报的顺序不会影响dclaration的逻辑后果。然而,该DBMS建立你也将具有以相同的顺序列中的组合索引,和列的组合索引的顺序会影响性能。

有关指定只有一个,两个或三个这些列,索引将是无用的,如果在索引中的第一列是在查询未指定的列的查询。如果事先知道你的查询gonig对我来说,和查询最需要跑得快,这可以帮助你声明列在正确的顺序中的主键。在极少数情况下,创建两个或三个额外的一列的索引可以加速一些查询,在减缓更新的成本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top