我正在尝试规范化mysql数据库....
我目前有一个包含11个“类别”列的表。第一列是user_id,另一列是category_id_1 - category_id_10。某些行可能只包含category_id,最多为category_id_1,其余行可能为NULL。
然后我有一个包含2列的表,user_id和category_id ...
在表2中将所有数据传输到单独的行而不为表1中的NULL列添加行的最佳方法是什么?
谢谢!
答案 0 :(得分:1)
您可以创建单个查询来完成所有工作,只需要进行一些复制和粘贴,并调整列名称:
INSERT INTO table2
SELECT * FROM (
SELECT user_id, category_id_1 AS category_id FROM table1
UNION ALL
SELECT user_id, category_id_2 FROM table1
UNION ALL
SELECT user_id, category_id_3 FROM table1
) AS T
WHERE category_id IS NOT NULL;
因为你只需要这样做10次,并且你可以在完成时抛弃代码,我认为这是最简单的方法。
答案 1 :(得分:0)
一个用户表:
users(id, name, username, etc)
一个类别:
categories(id, category_name)
将两者联系起来,包括您在该联接中可能需要的任何额外信息。
categories_users(user_id, category_id)
-- or with extra information --
categories_users(user_id, category_id, date_created, notes)
将数据传输到链接表将是编写一系列SQL INSERT语句的情况。可能有一些很棒的方法一次性完成,但由于只有11个类别,只需复制并粘贴IMO:
INSERT INTO categories_users
SELECT user_id, 1
FROM old_categories
WHERE category_1 IS NOT NULL