我有一个自制的PHP和MySQL的web应用程序。使用my system的许多不同客户端都希望使用自定义字段来增强实体。每个客户端都希望存储自己的附加数据,因此这应该以动态的方式完成。
例如,client1希望向他们的产品添加"safety_level“属性,client2希望为他们的产品添加一个名为”safety_level“的字段。
我想要一种不仅适用于产品,而且适用于用户和任何其他实体的方法。
这里有两个我找到的最优方案,但不能决定哪一个是最有效的:
选项1:为每个实体创建一个表,将附加字段值存储在1:1中。
+---------------------------------------------+
|products_custom_fields |
+---------------------------------------------+
|product_id (PK and FK related to products.id)|
|safety_level |
|some_other_fields |
+---------------------------------------------+pro:这个表不能拥有比实体表更多的记录(在本例中是产品),这意味着记录更少,而且很容易概览。
con:添加新字段或删除旧字段的需要DDL查询。我不想向users...not吐露DDL,即使是具有管理权限的操作符。
选项2: [entity]_custom_field_values将具有与[entity]表的N:1关系。每行包含自定义字段的类型和值本身。在这种情况下,我们需要另一个包含自定义字段类型的表。例如:
自定义字段值:
+----------------------------------------------------------------------+
|products_custom_field_values |
+----------------------------------------------------------------------+
|custom_field_id |
|custom_field_type (FK product_custom_field_types.custom_field_type_id)|
|value |
+----------------------------------------------------------------------+自定义字段类型:
+---------------------------------------------------------+
|products_custom_field_types |
+---------------------------------------------------------+
|custom_field_type_id (PK AUTO_INCREMENT) |
|product_id (FK related to products.id) |
+---------------------------------------------------------+pro:管理字段很简单,不需要更改表结构。
con:更多的记录,在一个大的mess...which中所有类型的自定义字段值都不是必要的错误,因为这是MySQL的要点,以从一个大混乱中提取有用的数据。问题是效率和绩效如何?
发布于 2016-03-29 14:14:13
https://stackoverflow.com/questions/36286759
复制相似问题