2012-03-24 4 views
0

Я пытаюсь создать несколько таблиц в mysql db для обработки клиентов, назначить их группам и предоставить клиентам в этих группах уникальные промо-коды/купоны.Каскад INNODB при удалении и обновлении

есть 3 родительские таблицы (?) - клиенты, группы, акции то у меня есть таблица - customerGroups назначить каждый customer_id многого group_id-х также у меня есть - customerPromotions назначить каждый customer_id ко многие promotion_id-х

I знаю, что мне нужно использовать каскад при удалении и обновлении, чтобы при удалении клиента, продвижении или группировке данные также удалялись из дочерних таблиц. Я собрал некоторые php для создания таблиц легко http://pastebin.com/gxhW1PGL

Я пытался читать каскадные ссылки на внешние ключи, но я думаю, что лучше учиться, пытаясь сделать что-то, а затем узнать, почему они работают. Может кто-нибудь, пожалуйста, дайте мне свой вклад в то, что я должен делать с этими таблицами, чтобы они работали правильно.

Я хотел бы, чтобы база данных и таблицы были настроены правильно, прежде чем я начну с запросов или чего-нибудь еще, чтобы любой совет был замечательным.

ответ

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;"; 

Вы только нужно идентификационные номера, когда личность трудно прибить. Когда вы имеете дело с людьми, личность трудно прибивать. Есть много людей по имени «Джон Смит».

Но вы имеете дело с двумя вещами, которые уже были идентифицированы. (И идентифицируется с номерами идентификаторов, из всех вещей.)

Каскадные удаления имеет смысл. Относительно редко можно каскадно обновлять номера идентификаторов; они, как предполагается, никогда не меняются. (Основная причина Oracle АБД настаивают на том, что первичные ключи всегда должны быть идентификационные номера, и что они должны никогда изменение происходит потому, что Oracle может не обновления каскада.) Если, позже, некоторые идентификационные номера потребность изменить по какой-либо причине вы можете изменить таблицу, чтобы включить в 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 

Вы будете иметь возможность переносить эти изменения через все ваши таблицы. (За исключением, может быть, вашей таблицы клиентов.)

+0

Я переместил ваши встроенные ссылки FK в конец инструкции CREATE. –

+0

@ypercube: ссылки FK OP (ссылка pastebin) были встроенными. Я просто добавил УДАЛИТЬ КАСКАД. –

+0

А, я не смотрел на пастебин. Встроенные ссылки FK получают (молча!), Игнорируемые InnoDB :) –

Смежные вопросы