Ios4 sqlite中的递归外键

Ios4 sqlite中的递归外键,ios4,sqlite,Ios4,Sqlite,sqlite中是否允许使用自引用或递归外键?有没有一种特殊的语法来实现这一点?到目前为止,我尝试了以下方法,但没有成功:外键(ParentPrimaryKeyId)引用了这个表名(PrimaryKeyId) 作为参考,我的目标是iOS 4中的sqlite 3.6.22。是sqlite支持自引用外键,例如: sqlite> PRAGMA foreign_keys = ON; sqlite> CREATE TABLE SomeTable ( ...> id INTEG

sqlite中是否允许使用自引用或递归外键?有没有一种特殊的语法来实现这一点?到目前为止,我尝试了以下方法,但没有成功:
外键(ParentPrimaryKeyId)引用了这个表名(PrimaryKeyId)


作为参考,我的目标是iOS 4中的sqlite 3.6.22。

是sqlite支持自引用外键,例如:

sqlite> PRAGMA foreign_keys = ON;
sqlite> CREATE TABLE SomeTable (
   ...>     id INTEGER PRIMARY KEY AUTOINCREMENT,
   ...>     parent_id INTEGER, 
   ...>     FOREIGN KEY(parent_id) REFERENCES SomeTable(id));
sqlite> INSERT INTO SomeTable (parent_id) VALUES (234324);
Error: foreign key constraint failed
sqlite> INSERT INTO SomeTable (parent_id) VALUES (NULL);
sqlite> SELECT * FROM SomeTable;
1|
sqlite> INSERT INTO SomeTable (parent_id) VALUES (1);
sqlite> SELECT * FROM SomeTable;
1|
2|1
sqlite> 

SQLite支持引用表和被引用表是同一个表的外键。(例如,请参见sixfeetsix的答案。外键约束的目标列必须具有“主键”或“唯一”约束。)但您应该仔细考虑是否确实需要在同一个表中存储有关内容以及内容之间关系的信息

例如,对“父母”和“孩子”来说,这样的想法通常更好

pragma foreign_keys = on;
create table persons (
  person_id integer primary key,
  person_name varchar(15) not null
);
insert into persons values (1, 'Dad');
insert into persons values (2, 'One son');
insert into persons values (3, 'One daughter');
create table persons_children (
  parent_id integer references persons (person_id),
  child_id integer references persons (person_id),
  check (parent_id <> child_id),
  primary key (parent_id, child_id)
);
insert into persons_children values (1,2);
insert into persons_children values (1,3);
SQLite不支持像PostgreSQL那样的递归查询

select pc.parent_id, p1.person_name as parent_name,
       pc.child_id,  p2.person_name as child_name
from persons_children pc
inner join persons p1 on (p1.person_id = pc.parent_id)
inner join persons p2 on (p2.person_id = pc.child_id);

1  Dad  2  One son
1  Dad  3  One daughter