我正在尝试在mysql数据库中创建一些表来处理客户,将它们分配给组并为这些组中的客户提供唯一的促销代码/优惠券。
有3个父(?)表 - 客户,群组,促销 然后我有table-customerGroups将每个customer_id分配给许多group_id 我也有 - customerPromotions将每个customer_id分配给很多promotion_id的
我知道我需要在删除和更新时使用级联,这样当我删除客户,促销或组时,数据也会从子表中删除。我把一些php放在一起轻松创建表格http://pastebin.com/gxhW1PGL
我一直在尝试阅读级联,外键引用,但我认为通过尝试做事情然后了解它们的工作原理我会学得更好。任何人都可以告诉我他们应该对这些表做些什么来使它们正常运行。
我想在开始查询或其他任何事情之前正确设置数据库和表格,这样任何建议都会很棒。
答案 0 :(得分:1)
你似乎只想要一点指导。所以我会尽量简短。
$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号上级联更新是相对罕见的;他们被认为永远不会改变。 (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
您希望通过所有表格进行这些更改。 (或许,除了您的客户表。)