2010-10-11 64 views
1

我有一个行业查找表:ID,名称。架构设计问题

我有其他行业属性,如行业部门,行业服务部门,行业产品等。这些都是每个行业所需的属性,因此所输入的任何行业都将拥有这些数据。这些数据是固定的列表项目,如行业部门=(小学,中学,大专)。在现场,这些值将是自动建议或单选下拉列表值。此外,这些将用作搜索过滤器,以进一步过滤现场工业。这些将用于报告 - >仅显示来自您的朋友的人属于主要行业的公司数量。

的架构我看到两个方面,它可以设计:
1)行业查找表将所有这些额外的数据作为文本
2)的附加数据将被存储为标识该FK参考他们的查找表。
3)也可以打开其他设计思路。

#1的问题在于不会执行数据质量。
问题#2是有很多固定列表项目,所以每个都有自己的查找表意味着将有大量的查找表和父表的FKs。

我不确定在大型系统的现实世界中,这是如何完成的。工业只是一个实体;我有很多实体,每个实体至少有40-50个固定列表项(列),哪种方式更好?欲了解更多信息,这是一个用户内容网站 - 专业网络网站,所以表现很重要。

对此提出建议?

回答

2

围棋与选项2:如果测量做很多连接,首先要确保您有查询工作负载正确的索引的性能影响,然后如果连接性能仍然是一个问题,可能denormalise。

0

这些是 所有必需的属性各行业如此被 进入任何一个行业都会有这些数据

但是,这将永远是这样吗?意思是,可能会删除或添加属性?这在大多数应用程序中可能会发生,这意味着您将删除/添加列以实现此目的。这应该使你至少考虑制作这些行,而不是列。

所以我建议#3:

与其让查找表为每个属性,只有一个。你有四张桌子这样总:

industries (id, name) 
industry_property_names (id, name) // Contains the name of the property, e.g., Industry sector 
industry_property_values (id, industry_property_name_id, name) // Primary, Secondary, tertiary 
industry_properties ((pk: industry_id, industry_property_name_id), industry_property_value_id) 

需要数据输入过程中的一些代码执行,但性能将是动态的,并期待企业会比较快。