[英]Joining mysql tables vs updating multiple tables
可以说我在mysql中有两个表。
1.人(身份证,姓名,姓氏)- 图片
2. someothertable(ID,名称,姓氏,操作,数量)- 图片
我想问一下,如果真的是不好的做法,一次更新两个表吗? 例如,如果有人将Robert Jackson的姓氏更新为“ Smith”,则执行2个查询:
mysql_query("UPDATE person SET lastname = '$lastname' WHERE id = '$id'");
mysql_query("UPDATE someothertable SET lastname = '$lastname' WHERE name = '$name' AND lastname = '$oldlastname'");
假设现在,您将不会遇到2个相同的名称和姓氏(仅是示例)。 强烈建议在显示表中的数据时将这两个表连接在一起,并仅在person
表中更改姓氏吗?
我以前不需要使用join
(数据库没有足够大的空间),而且我刚刚开始怀疑是否还有另一种方法(超过2个查询)。 使用join
将需要一些代码更改,但是,如果它做对了,我已经准备好做。
使用join
不是数据库大小的函数,它是关于规范化和数据完整性的。 您只在一个表中使用lastname
的原因是,这样就不必担心保持值同步。 在您的示例中,如果这些调用在单个事务中,则它们应保持同步。 除非其中之一在其他地方更改,或者在数据库中手动更改。
因此,您可以选择以下表格:
person (id, name, lastname)
someothertable (id, person_id, action, quantity)
一种选择是使someothertable
对Person
的lastname
字段具有外键约束。 您可以应用更新触发器,以便它会自动级联。
下面是一个示例:
Alter table someothertable add constraint foreign key (lastname) references Person (lastname) on delete cascade on update cascade;
可以看到下面的通用版本:
Alter table [table-name] add constraint foreign key (field-in-current-table) references [other-table-name] (field-in-other-table) on delete cascade on update cascade;
可以将其应用于任何表中的任何字段。 然后,您可以将触发器设置为适合您的触发器。 这是参考链接。
您是否考虑过标准化?
另一个选择是为Person
表中的每个person
分配一个uniqueID(即PersonID
)。 现在,在所有其他表格中,您引用的person
通过唯一ID引用的。 这增加了许多优点:
1)保持数据规范化2)保持数据完整性3)不需要更新,触发器或级联4)仅需在一个位置进行更改
希望这可以帮助。 祝你好运!
除了使用2更新,您还可以使用trigger: 此处的教程
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.