我有一张 table :
TRADESHOW
id
name
industry
行业当前列为行业的文本名称(软件、硬件、网络等)。我正在考虑将行业转移到单独的表中,这似乎是一个更好的设计,并且也使数据更加一致,并且更容易让我的应用程序添加或编辑不同的行业。新表将是:
INDUSTRY
id
name
TRADESHOW.industry 将变为 TRADESHOW.industry_id
我的问题:
这个改变有意义吗?如果 IND
在此处输入代码
USTRY 表甚至具有代理键 (INDUSTRY.id
),或者INDUSTRY.name
的一列更有意义作为主键?在实现
INDUSTRY
表后,形成 UPDATE 语句来修复TRADESHOW
表的最佳方式是什么?我想我需要一个带有SELECT
语句的UPDATE
?假设在行业中保留代理键是有意义的,我的想法如下:
..
UPDATE tradeshow SET tradeshow.industry =
(SELECT id FROM industry WHERE tradeshow.industry=industry.name)
这行得通吗? (我知道这不会是完美的,因为现在的行业名称并不是100%一致的。)有更好的方法吗?谢谢!
最佳答案
你绝对应该有一个行业表,这是基于第三范式的良好设计实践,并且主键可以是ID(就像你一样)。 TRADESHOW 表将使用 indsutry_id 作为 FK,Name 也将成为一个很好的主键,但通常当有大量 FK 引用它时,存储空间可能会变大。
按照您现在的方式,如果您的 INDUSTRY 表中有两条具有相同行业名称的记录,它将不起作用。我假设您正在从现有的 TRADESHOW 表填充该表?在这种情况下,您将执行 SELECT UNIQUE Industry 来创建 INDUSTRY 表,因此它应该是唯一的。然后您可以运行首次填充的更新查询。
关于mysql - 更新集 = 选择语句 & 主键问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7068603/