为由一个属性分隔的实体创建两个单独的表?

时间:2010-01-20 14:23:25

标签: database-design

假设我有一个名为Apple_Jobs的表。

它定义来自Apple_Server的作业。

现在假设我有另一台名为Orange_Server

的服务器

我应该

  • 使用名为Apple_Jobs的属性修改现有Origin表,该属性定义作业的来源 - AppleServerOrangeServer

OR

  • 制作单独的Orange_Jobs表。

使用第一个选项,我需要将某些应用程序现有的查询和存储过程修改为仅包含AppleServer原始作业,第二个选项我不需要修改任何存储过程。

每个表的结构都是一样的。

2 个答案:

答案 0 :(得分:2)

如果你发现自己创建了一个名为的表 AppleServer OrangeServer PearServer

甚至是PomograniteServer

你有一个严重的问题,修复它会创建一个名为type的字段,其中包含“Apple”,“Orange”,“Pear”和臭名昭着的“Pomogranite”等可用值。

不要继续添加表格,这会让你的生活更加可怜。 如果您需要特定的水果服务器,则查询一个表:

SELECT blah FROM MyTable WHERE Type="Orange"

答案 1 :(得分:1)

始终瞄准最大database normalization(当然,这是有道理的)。在您的情况下,我建议您创建一个ServerType(查找/元)表,其中包含您的服务器类型列表(例如Orange,Apple,Watermelon等)。然后在ServerTypeID表中添加Jobs列,该列将是ServerType表的外键。