Al ejecutar el script sql en la base de datos:
create table AuthItemChild
(
parent varchar(64) not null,
child varchar(64) not null,
primary key (parent,child),
foreign key (parent) references AuthItem (name) on delete cascade on update cascade,
foreign key (child) references AuthItem (name) on delete cascade on update cascade
);
El sistema dice:
Mens. 1785, Nivel 16, Estado 0, Línea 1
Si especifica la restricción FOREIGN KEY 'FK__AuthItemC__child__3F522093' en la tabla 'AuthItemChild', podrían producirse ciclos o múltiples rutas en cascada. Especifique ON DELETE NO ACTION o UPDATE NO ACTION, o bien modifique otras restricciones FOREIGN KEY.
Mens. 1750, Nivel 16, Estado 0, Línea 1
No se pudo crear la restricción. Consulte los errores anteriores.
Alguna idea de cual es el problema ???
creo que el problema esta en que ambas hacen referencia al mismo campo en otra tabla... y que si le sucede algo a AuthItem (name) se actualizara/eliminara en cascada en ambos campos, lo cual es logico si la relacion es de muchos a muchos en la misma tabla (AuthItem)... puedo preguntar que base de datos y que motor usas?
Motor: MS SQL SERVER 2008
base de datos: SQL
lo corregi asi, no se si esta bien pero funciono:
create table AuthItemChild
(
parent varchar(64) not null,
child varchar(64) not null,
primary key (parent,child),
foreign key (parent) references AuthItem (name) on delete cascade on update cascade,
foreign key (child) references AuthItem (name) on delete no action on update no action
);
El codigo completo del script es:
/**
* Database schema required by CDbAuthManager.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
* @copyright Copyright © 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
* @since 1.0
*/
drop table if exists AuthAssignment;
drop table if exists AuthItemChild;
drop table if exists AuthItem;
create table AuthItem
(
name varchar(64) not null,
type integer not null,
description text,
bizrule text,
data text,
primary key (name)
);
create table AuthItemChild
(
parent varchar(64) not null,
child varchar(64) not null,
primary key (parent,child),
foreign key (parent) references AuthItem (name) on delete cascade on update cascade,
foreign key (child) references AuthItem (name) on delete cascade on update cascade
);
create table AuthAssignment
(
itemname varchar(64) not null,
userid varchar(64) not null,
bizrule text,
data text,
primary key (itemname,userid),
foreign key (itemname) references AuthItem (name) on delete cascade on update cascade
);