我有一个行业查询表: ID,姓名。
我有其他行业属性,如工业部门,行业服务,工业产品等。这些都是每个行业的必备属性,因此任何行业都将输入这些数据。这些数据是固定列表项,如行业部门=(一级、二级、三级)。在现场,这些值将是自动建议或单选下拉列表值。此外,这些将被用作搜索过滤器,以进一步过滤网站上的行业。这些将用于像->这样的报告,只显示来自你的朋友的属于第一产业的公司的数量。
对于模式,我认为有两种设计方法:
1)行业查询表将以文本形式包含所有这些附加数据
2)额外的数据将被存储为ID,FK引用这些ID到它们的查找表。
3)对其他设计思想也持开放态度。
#1的问题是不会强制执行数据质量。
with# 2的问题是有许多固定列表项,因此每个项都有自己的查找表,这意味着将有大量的查找表和父表的FK。
我不确定在大型系统的现实世界中,这是如何做到的。行业只有一个实体;我有很多实体,每个实体至少有40-50个固定列表项(列),那么哪种方式更好?对于更多的信息,这是一个用户内容网站-专业的网络网站,所以性能很重要。
有什么建议吗?
发布于 2010-10-12 00:47:19
使用选项2:如果测量执行多个连接对性能的影响,首先确保查询工作负载具有正确的索引,然后如果连接性能仍然是一个问题,则可以进行非正规化。
发布于 2010-10-12 00:56:00
这些都是每个行业的必需属性,因此输入的任何行业都将具有这些数据
但这种情况会一直存在吗?也就是说,可以删除或添加属性吗?这在大多数应用程序中都是可能发生的,这意味着您将删除/添加列来实现此操作。这至少会让你考虑制作这些行,而不是列。
所以我建议#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)
在数据输入期间需要一些代码强制执行,但属性将是动态的,查找将相对较快。
https://stackoverflow.com/questions/3908136
复制相似问题