想象一下带有一组复选框的Web表单(可以选择其中的任何一个或全部).我选择将它们保存在存储在数据库表的一列中的逗号分隔值列表中.
现在,我知道正确的解决方案是创建第二个表并正确地规范化数据库.实现简单的解决方案更快,我想快速获得该应用程序的概念验证,而无需花费太多时间.
我认为节省的时间和更简单的代码在我的情况下是值得的,这是一个可辩护的设计选择,还是我应该从一开始就将其标准化?
更多上下文,这是一个小型内部应用程序,实际上取代了存储在共享文件夹中的Excel文件.我也在问,因为我正在考虑清理程序并使其更易于维护.在那里有一些我并不完全满意的事情,其中一个是这个问题的主题.
我需要选择与用户关联的所有组名称。
尝试了所有可能的解决方案,但没有一个有效。
CREATE TABLE `users` (
`id` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`groups` json NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `groups` (
`id` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `users` (`id`, `name`, `groups`) VALUES('U-1001', 'John Doe', '[\"G-9001\", \"G-9003\"]');
INSERT INTO `groups` (`id`, `name`) VALUES('G-9001', 'Group 1');
INSERT INTO `groups` (`id`, `name`) VALUES('G-9002', 'Group 2');
INSERT INTO `groups` (`id`, `name`) VALUES('G-9003', 'Group 3');
Run Code Online (Sandbox Code Playgroud)
此解决方案有效:使用 MySQL JSON 字段连接表
SELECT u.id, …Run Code Online (Sandbox Code Playgroud)