【发布时间】:2012-07-12 21:41:06
【问题描述】:
我有一个父表 A 具有以下属性(列){ PKA, a1, a2...} 和子表 B 具有以下属性 {FKA, b1, b2...} PKA 是表 A 的主键(自增),表 B 没有任何主键,但它有一个外键列 FKA,它引用表 A 的 PKA 列(1:n 关系)
添加条目: 当我在表 A 中添加一个条目时...我使用 PDO API lastInsertId() 来插入记录并使用此值在表 B 中填充 FKA。
问题: 1. 但是,在删除条目时,我没有找到可以以类似方式使用的 API 'lastDeleteId()'
更大的问题: 当我的删除发生在表 A 上时,根据设计,删除命令是: DELETE from table A where a1 = 。此 a1 列是非唯一的,因此 DELETE 命令可以返回需要从表 B 中刷新的多个 PKA 键
注意事项:
- 我正在使用 PDO API
- MySQL 表(此处正在考虑)是 InnoDB
- 我在事务模式下运行(beginTransaction() 和 commit()/rollback() 之间的多个 SQL 调用
- 不寻找 CASCADE ON DELETE 选项
感谢您的任何指点。
【问题讨论】:
-
每张表都应该有一个PK,怎么才能唯一标识一条记录呢?这对于删除尤为重要。
-
@HLGEM 与您的肯定相反的一个反例是,多对多链接表不需要也不应该使用 PK,除非您将两个 FK 都用作多列 PK。
-
@HLGEM 这不一定是真的。其他列可用于删除记录。我特别不需要唯一标识表 B 中的记录。在我的情况下,将 PK 添加到表 B 是多余的
-
@HLGEM 我并没有建议 PK 是不必要的,我建议唯一标识一行并不总是通过一个列定义(在多对多表的情况下,我建议多列 PK);我的建议是,并非每个表都需要单列 PK。我觉得您的回复令人反感,并希望在事态升级之前在此结束(通过停止进一步的辩论)。
-
@HLGEM 无需点名即可表达您的观点。