Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 模式设计问题_Php_Database_Schema - Fatal编程技术网

Php 模式设计问题

Php 模式设计问题,php,database,schema,Php,Database,Schema,我有一个行业查找表:ID,Name 我有其他行业属性,如行业部门、行业服务、行业产品等。这些都是每个行业所需的属性,因此输入的任何行业都将有这些数据。这些数据是固定的列表项,如工业部门=初级、二级、三级。在现场,这些值将是自动建议值或单选下拉列表值。此外,这些将被用作搜索过滤器,以进一步过滤网站上的行业。这些将被用于报告,比如->显示属于初级产业的公司数量,只显示你的朋友 对于schema,我看到了两种设计方法: 1行业查找表将所有这些附加数据作为文本 2附加数据将存储为ID,FK引用其查找表。

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

我有其他行业属性,如行业部门、行业服务、行业产品等。这些都是每个行业所需的属性,因此输入的任何行业都将有这些数据。这些数据是固定的列表项,如工业部门=初级、二级、三级。在现场,这些值将是自动建议值或单选下拉列表值。此外,这些将被用作搜索过滤器,以进一步过滤网站上的行业。这些将被用于报告,比如->显示属于初级产业的公司数量,只显示你的朋友

对于schema,我看到了两种设计方法: 1行业查找表将所有这些附加数据作为文本 2附加数据将存储为ID,FK引用其查找表。 3对其他设计理念也持开放态度

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

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

建议?

选择选项2:如果您衡量了执行多个联接对性能的影响,请首先确保为查询工作负载提供了正确的索引,然后如果联接性能仍然是一个问题,则可能进行非规范化

这些都是所需的属性 每个行业都是如此,任何行业都是如此 输入将有这些数据

但情况会一直如此吗?也就是说,可以删除或添加属性吗?这在大多数应用程序中都可能发生,这意味着您将删除/添加列以实现这一点。这至少会让你考虑制作这些行,而不是列。

因此,我建议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)
在数据输入期间需要一些代码强制执行,但属性将是动态的,并且查找速度相对较快