使用Foreign_SCHEMA.COLUMNS的外键

时间:2014-07-02 21:05:58

标签: mysql sql ng-grid

我有一个应用程序,它显示一个数据表(ng-grid),其中填充了我的MySQL服务器响应的JSON编码版本。

我可以显示/隐藏列。我缺少的是指定默认列的能力,并保存新的列列表。此功能应特定于每个用户。

我目前的想法是建议实施以下数据模型:

data
id, name, location
1, one, here
2, two, there
3, three, unknown

users
id, name
1, Me
2, You

columns
id, name
1, id
2, name
3, location

columns_users_map
id, columnId, userId
1, 2, 1
2, 3, 1

SELECT c.name FROM column_user_map AS map
JOIN columns AS c ON map.columnId = c.id
WHERE userId = 1

这将导致显示一系列列名:名称,位置

但是,我不想实现一个名为' columns'需要与我的数据'并行运行。表。如果我想更改列名称' name'在'数据'表格更准确(例如,' model')。

除非我更改了'列中的值。这个表也会破坏我的前端(我报告了一个在JSON中实际上不存在的列)。

在我的小脑中,我想,#34;好吧,显然我需要列名作为INFORMATION_SCHEMA中某些信息的外键。

我对SO的伟大思想的问题有两部分:

1)这是一个愚蠢的想法吗?直接在INFORMATION_SCHEMA中引用信息是不好的做法吗?

2)INFORMATION_SCHEMA.COLUMNS没有主键。我如何将它用作外键?

1 个答案:

答案 0 :(得分:2)

INFORMATION_SCHEMA表不是普通表,它们只是在处理程序接口上响应的代码,就像它们是表一样。您无法将键添加到INFORMATION_SCHEMA“表格”。

InnoDB外键只能引用InnoDB表,并且必须引用该表中某个键的列的左前缀。

但这一切都与你的根本问题无关。您的问题是您在MySQL之上实现自己的元数据系统。这是一个名为Inner-Platform Effect的反模式。它是一个反模式,因为你最终会强迫自己编写大量代码来实现DBMS应该为你提供的列名和约束等内容。

您可以这样做,但不要指望DBMS参与。 : - )