gpt4 book ai didi

mysql - 使用 INFORMATION_SCHEMA.COLUMNS 的外键

转载 作者:行者123 更新时间:2023-11-29 07:58:17 26 4
gpt4 key购买 nike

我有一个显示数据表(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

这应该会显示一个列名称数组:名称、位置

但是,我不想实现一个名为“列”的表,该表需要与“数据”表并行运行。如果我想更改“数据”表中“名称”列的名称以更准确地命名(例如“模型”),该怎么办?

除非我也更改“列”表中的值,否则这将破坏我的前端(我报告的列实际上并不存在于 JSON 中)。

在我的小大脑中,我对自己说:“好吧,显然我需要列名作为 INFORMATION_SCHEMA 中某些信息的外键。

我向 SO 的伟人提出的问题分为两部分:

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

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

最佳答案

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

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

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

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

关于mysql - 使用 INFORMATION_SCHEMA.COLUMNS 的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24541034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com