我正在尝试在 mysql 数据库中创建一些表来处理客户,将他们分配到组并为这些组中的客户提供唯一的促销代码/优惠券。
有 3 个父表(?) - 客户、群组、促销 然后我有表 - customerGroups 将每个 customer_id 分配给许多 group_id 我还有 - customerPromotions 将每个 customer_id 分配给许多 Promotion_id
我知道我需要在删除和更新时使用级联,以便当我删除客户、促销或组时,数据也会从子表中删除。我整理了一些 php 来轻松创建表格 http://pastebin.com/gxhW1PGL
我一直在尝试阅读级联、外键引用文献,但我认为通过尝试做事然后了解它们为何有效,我可以学得更好。任何人都可以向我提供他们的意见,告诉我应该如何处理这些表以使它们正常运行。
我希望在开始查询或进一步操作之前正确设置数据库和表,因此任何建议都会很棒。
最佳答案
您似乎只需要一点指导。所以我会尽量简短。
$sql = "CREATE TABLE customerGroups (
customer_id int(11) NOT NULL,
group_id int(11) NOT NULL,
PRIMARY KEY (customer_id, group_id),
CONSTRAINT customers_customergroups_fk
FOREIGN KEY (customer_id)
REFERENCES customers (customer_id)
ON DELETE CASCADE,
CONSTRAINT groups_customergroups_fk
FOREIGN KEY (group_id)
REFERENCES groups (group_id)
ON DELETE CASCADE
)ENGINE = INNODB;";
当身份难以确定时,您只需需要身份证号码。当你与人打交道时,身份很难确定。有很多人叫“约翰·史密斯”。
但是您正在处理两件已经确定的事情。 (并且用 ID 号进行识别。)
级联删除是有意义的。对 ID 号进行级联更新的情况相对较少;他们被认为永远不会改变。 (Oracle DBA 坚持主键必须始终是 ID 号,并且它们绝不能更改的主要原因是 Oracle 无法级联更新。)如果以后由于某种原因需要更改某些 ID 号,您可以更改表以包含 ON UPDATE CASCADE。
$sql = "CREATE TABLE groups
(
group_id int(11) NOT NULL AUTO_INCREMENT,
group_title varchar(50) NOT NULL UNIQUE,
group_desc varchar(140),
PRIMARY KEY (group_id)
)ENGINE = INNODB;";
请注意 group_title 上的附加唯一约束。您不想在数据库中允许类似的内容(如下)。
group_id group_title
--
1 First group
2 First group
3 First group
...
9384 First group
您需要在所有表中进行此类更改。 (也许,您的客户表除外。)
关于php - INNODB 级联删除和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9855831/