架构设计问题

时间:2010-10-11 16:34:10

标签: php database schema

我有一个行业查询表:ID,Name。

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

对于架构,我看到它可以设计的两种方式:
1)行业查找表将所有这些附加数据作为文本
2)附加数据将存储为FK引用其查找表的ID 3)也可以接受其他设计理念。

#1的问题是不会强制执行数据质量 #2的问题是有许多固定的列表项,因此每个都有自己的查找表意味着将有大量的查找表和父表的FK。

我不确定在大型系统的现实世界中如何做到这一点。工业只是一个实体;我有很多实体,每个实体至少有40-50个固定列表项(列),那么哪种方式更好?有关详细信息,这是一个用户内容网站 - 专业网络网站,因此性能非常重要。

建议?

2 个答案:

答案 0 :(得分:2)

使用选项2 :如果衡量执行多个联接对性能的影响,请首先确保为查询工作负载提供正确的索引,然后如果连接性能仍然存在问题,可能denormalise。

答案 1 :(得分: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)

在数据输入期间需要一些代码实施,但属性将是动态的,并且查找将相对较快。

相关问题