请让我首先说,我知道这已被问过很多次了,我已经研究了其他问题(和答案)但是在阅读了2天的问题和修改我的数据库后,我无法将其作为我想要。
目前我有各种表格,例如customer
,supplier
,product
,banner
等。
我有一个名为custom_field
的表,它允许创建自定义字段并用于其他各种表。
目前我的一些表格看起来像这样:
General Tables
==============
Customer
+-------------+---------------+
| customer_id | customer_name |
+-------------+---------------+
| 1 | Peter |
| 2 | Sally |
+-------------+---------------+
Banner
+-----------+-------------+--------------+
| banner_id | banner_name | banner_width |
+-----------+-------------+--------------+
| 1 | Easter | 100px |
| 2 | Xmas | 250px |
+-----------+-------------+--------------+
Tables for managing custom fields
=================================
Custom_Field
+----------+------------+----------------+-----------+
| field_id | field_name | field_label | item_type |
+----------+------------+----------------+-----------+
| 100 | fav_color | Favorite Color | customer |
| 101 | border | Border | banner |
+----------+------------+----------------+-----------+
Custom_Field_Value
+----------+----------+---------+-------------+
| value_id | field_id | item_id | field_value |
+----------+----------+---------+-------------+
| 1567 | 100 | 1 | Red |
| 1568 | 100 | 2 | Blue |
| 1569 | 101 | 1 | Solid |
| 1570 | 101 | 2 | Dotted |
+----------+----------+---------+-------------+
为了澄清,item_id
指的是customer_id
,banner_id
或supplier_id
等。在上面的例子中,这意味着彼得有一个“最喜欢的颜色”自定义字段设置为红色,Sally将“喜欢的颜色”自定义字段设置为蓝色。
复活节横幅的“边框”自定义字段设置为实体,而圣诞横幅的“边框”自定义字段设置为虚线。
这一切都正常,但在Custom_field_value.item_id
和Customer.customer_id
(或Banner.banner_id
)之间不能设置外键或参照完整性,因为{{1}描述了item_id的上下文} item_type
表中的字段。
我不想创建多个可以为空的外键(不确定它们甚至可以工作),因为它将变得无法管理。
我确实尝试创建子表,例如Custom_Field
,并在customer_custom_field
和Customer
之间进行关联,但是当您认为每个表都可能包含自定义字段时,它又变得无法管理。
单个字段值只能应用于另一个表中的单个实体。
顺便说一下,我还想创建一个Custom_Field
表来管理上传到特定实体的附件,这又可以应用于客户,供应商,产品和其他各种表,所以这是一个类似的问题。 / p>