【问题标题】:I have two tables in MySQL that have identical columns. Is there a way to detect changes between them?我在 MySQL 中有两个具有相同列的表。有没有办法检测它们之间的变化?
【发布时间】:2016-11-15 06:33:14
【问题描述】:

我有以下表格:

电影

  • 标题 - VARCHAR (255)
  • - VARCHAR (4)
  • 格式 - VARCHAR (255)

movie_custom

  • 标题 - VARCHAR (255)
  • - VARCHAR (4)
  • 格式 - VARCHAR (255)
  • username_id - INT (11)

每个表都有不同的数据,但我想确保某些列名没有变化。例如,如果我在 movie 上将 format - VARCHAR (255) 更改为 distribution_type - VARCHAR (30),我也想做确保对 movie_custom 进行相同的更改。

有什么方法可以在 MySQL 中确保这一点?以某种方式将两列耦合在一起?

【问题讨论】:

  • 建议你链接到你之前的问题;也许戈登会得到照片。

标签: mysql sql database database-design schema


【解决方案1】:

评论太长了。

听起来您的数据模型很糟糕。如果你修复了数据模型,你就会解决你的问题。

你应该有一个带有主键的电影数据库:

create table movies (
    movieId int primary key auto_increment,
    . . .
);

那么,第二个表应该有三列:

create table moviesCustom (
    movieCustomId int primary key auto_increment,
    movieId int not null,
    username_id int,
    constraint foreign key (movieId) references movies(movieId)
);

然后,当您需要两个表中的信息时,请使用 join

【讨论】:

  • 这里的问题是我希望用户能够自定义 movie 表中的所有数据,这就是为什么我有一个包含所有相同列的 movie_custom 表,用户可以自定义他们希望的方式。我不能保证movies 中的所有数据都是正确的,所以movie_custom 允许用户存储他们自己更正的数据。如果有人想将标题重命名为 Twelve Monkeys 而不是 12 Monkeys,那么这是他们的选择。你是说我应该将用户生成的数据与初始数据混合到一个 movies 表中,username_id 是差异化因素?
  • @EthanAllen。 . .你的评论似乎与这个问题截然相反。问题是关于保持价值观相同。也许你应该问另一个问题,关于完成你想做的事情的最佳数据结构。
【解决方案2】:

A计划

title 创建一个规范化表。然后,用MEDIUMINT UNSIGNED 代替VARCHAR(...) 链接到该表。

然后,当从 anywhere(基本或自定义)添加 any 标题时,在该表中查找名称以获取 id(或创建新 id)。

如果title 在单个位置(并安抚 Gordon),这可能是保持 数据类型 的唯一方法。

但是,过度使用它(即,以这种方式完成多个列)会降低性能。

建议:把year VARCHAR(4)改成year YEAR,因为有这样的数据类型。

B计划

合并两张表;使用特殊的 username(可能为 NULL)作为“基础”条目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2022-11-15
    相关资源
    最近更新 更多