创建多个锁定表。创建单个查找表

时间:2013-06-28 08:55:35

标签: database-design

我有多个表用于存储公司资产,这些表包括: -

•车辆

•服务器

•个人电脑

•家具

现在,对于每个资产,我想创建一个查找表,存储资产模型,例如在创建新PC时,用户将选择模型“Dell vostro 350”等。 但更好的是什么;定义四个查找表(例如vechicle_model,Server_models,Pc_models,furniture_model),或定义一个查找表并有一个描述其类型的列(type = PC)

此致

3 个答案:

答案 0 :(得分:6)

使用单独的查找表,尽管它们似乎有相似之处 - 除非你a)想要允许某人存储Dell vostro 350作为家具类型,或b)希望内部具有明显更复杂的约束数据库,以防止记录这种交叉选择。

事实上,你对单个查找表的提议是众所周知的,它甚至获得了它自己的首字母缩写词 - OTLT,One True Lookup Table的缩写。如果你想要搜索它,它几乎总是与“反模式”或“初学者错误”相提并论。

答案 1 :(得分:2)

这些表是否共享相同的列,约束和物理存储?

  • 如果是,他们应该是一张桌子。
  • 如果没有,请将它们分开。

请注意,上述情况实际上比初看起来更难实现。例如,如果出现以下情况,表格应分开:

  • 对于每个表,任何键都应该是唯一的,而不是所有表的行的并集。
  • 外键存在于一个表中但不存在于另一个表中,或外键引用一个表而不是另一个表。
  • 一个表中存在CHECK约束,但另一个表中不存在。这甚至包括NOT NULL等简单的东西。
  • 列类型或宽度不同。
  • 触发器不同。
  • 权限不同。
  • 需要采用表级锁。
  • 表需要以不同方式进行群集或分区,或者只是存储在不同的磁盘上,或者在某些其他物理存储参数上有所不同(取决于DBMS)。
  • 等等...

因此,您可能需要将表格分开。

答案 2 :(得分:1)

如果你打算用于查找,我会选择一个表解决方案。

如果您计划根据其型号存储有关资产的其他信息,例如车辆是汽油/柴油,还是PC是台式机或笔记本电脑,那么多表解决方案可能会更好。