与多个表的外键一对一的关系

时间:2017-08-18 09:27:57

标签: mysql database database-design entity-attribute-value

请让我首先说,我知道这已被问过很多次了,我已经研究了其他问题(和答案)但是在阅读了2天的问题和修改我的数据库后,我无法将其作为我想要。

目前我有各种表格,例如customersupplierproductbanner等。

我有一个名为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_idbanner_idsupplier_id等。在上面的例子中,这意味着彼得有一个“最喜欢的颜色”自定义字段设置为红色,Sally将“喜欢的颜色”自定义字段设置为蓝色。

复活节横幅的“边框”自定义字段设置为实体,而圣诞横幅的“边框”自定义字段设置为虚线。

这一切都正常,但在Custom_field_value.item_idCustomer.customer_id(或Banner.banner_id)之间不能设置外键或参照完整性,因为{{1}描述了item_id的上下文} item_type表中的字段。

我不想创建多个可以为空的外键(不确定它们甚至可以工作),因为它将变得无法管理。

我确实尝试创建子表,例如Custom_Field,并在customer_custom_fieldCustomer之间进行关联,但是当您认为每个表都可能包含自定义字段时,它又变得无法管理。

单个字段值只能应用于另一个表中的单个实体。

顺便说一下,我还想创建一个Custom_Field表来管理上传到特定实体的附件,这又可以应用于客户,供应商,产品和其他各种表,所以这是一个类似的问题。 / p>

0 个答案:

没有答案