设置关系表

时间:2011-04-21 11:14:47

标签: python database sqlite

我想在不处理ID 的情况下添加关系数据。让我解释。例如,Nokta1Nokta2Cihaz1相关。 Nokta3Cihaz2相关。所以这是一个一对多的关系。

Cihaz1Cihaz2行添加到cihaz表后,如何将Nokta1Nokta2Nokta3行插入{ {1}}表与这些关系?

我的代码中是否有错误?

nokta

2 个答案:

答案 0 :(得分:0)

链接表应定义为:

   create table link (     
       nokta_id integer,      
       cihaz_id integer,
       FOREIGN KEY(nokta_id) REFERENCES nokta(id),
       FOREIGN KEY(cihaz_id) REFERENCES cihaz(id)
   )   

但你真的根本不需要这张桌子。它只是Nokta表对属性id和cihaz_id的投影(即相当于选择id,来自Nokta的chaz_id)。

  

将“Cihaz1”和“Cihaz2”行添加到“cihaz”表后,我怎么能用这些关系将“Nokta1”,“Nokta2”和“Nokta3”行插入“nokta”表?

添加Nokta1,Nokta2和Nokta3应该没有问题,只要它们只引用cihaz表中的现有值。

e.g。

INSERT INTO CIHAZ(name) VALUES('Cihaz1');
...
INSERT INTO CIHAZ(name) VALUES('Cihaz7');

INSERT INTO NOKTA(name, module, type, desc, cihaz_id) VALUES ('Nokta1', 'AO', 'CVXY', '1', 1),

对于最后一个字段(外键字段),值1,2,3,4,5,6或7都可以,因为我们已经将带有这些键的行插入到CIHAZ中(自动创建)。

答案 1 :(得分:0)

如果您想通过名称而不是ID来关联它们,那么只需使用外键来命名。

c.execute('''create table nokta
             id integer primary key autoincrement,
             name text,
             parent text
             FOREIGNKEY(parent) REFERENCES cihaz(name)''')

现在,当您插入nokta时,只需使用适当的父级。

 c.execute('insert into nokta (text, parent) values ?, ?', ('Nokta1', 'Cihaz1'))

现在要查询与特定cihaz相关的所有nokta,只需使用名称。

 c.execute('select * from nokta where parent = ?', ('Cihaz1',))