Android:使用FOREIGN KEY INSERT,该FOREIGN KEY不对应PRIMARY KEY

时间:2011-08-09 13:41:20

标签: android sql sqlite foreign-keys

首先,请原谅我的近似英语。

我有2个表,一个(tb_facture),外键引用第二个(tb_garage)

我的问题是我不能在没有提供引用tb_garage的外键的情况下插入tb_facture。

如果我提供有效的外键,则没有问题。但是如果我尝试给-1(或其他东西),它就不会插入。

我必须能够这样做,因为在我的应用程序中,没有义务将车库链接到发票。

这是插入代码:

private void saveState(){
    String libelleFac = etLibelleFac.getText().toString();
    String dateFac = tvDateAfficheeFac.getText().toString();
    String kmFac = etKmFac.getText().toString();
    String remarqueFac = etRemarqueFac.getText().toString();
    float montantFac = Float.parseFloat(etMontantFac.getText().toString());
    String datePaieFac = tvDateAfficheePaiement.getText().toString();

    if(mRowId == null){
        if (cbGarageFac.isChecked()){
            db.insererFacture(itemSpListeVhc, itemSpListeGar, dateFac, libelleFac, remarqueFac, kmFac, montantFac, datePaieFac);
        }
        else{
            db.insererFacture(itemSpListeVhc, -1, dateFac, libelleFac, remarqueFac, kmFac, montantFac, datePaieFac);
        }
    }
}

如果我用有效的外键或itemSpListeGar替换-1,它就可以工作。

这是我的问题:

public long insererFacture(long fkVhcFac, long fkGarFac, String dateFac, String libelleFac, String remarqueFac, String kmFac, float montantFac, String datePaieFac){
    ContentValues values = new ContentValues();
    values.put("fk_vhc_fa", fkVhcFac);
    values.put("fk_gar_fa", fkGarFac);
    values.put("date_fa", dateFac);
    values.put("libelle_fa", libelleFac);
    values.put("remarque_fa", remarqueFac);
    values.put("kilometrage_fa", kmFac);
    values.put("montant_fa", montantFac);
    values.put("date_paie_fa", datePaieFac);
    return db.insert("TB_FACTURE", null, values);   
}

感谢您的帮助!

PS:我指定我不使用真正的FOREIGN KEYS,但触发方法是这样的:

"fk_gar_fa INTEGER CONSTRAINT ct_fk_gar_fa REFERENCES TB_GARAGE(_id),"

1 个答案:

答案 0 :(得分:0)

你不能绕过这个,强制referential integrity是关系数据库的基础!

在你的情况下,我建议制作一个说“没有车库”的车库记录。在Facture表中添加没有关联车库的记录时,使用它的主键作为外键。

这有点难看,但要么是这样,要么你改变你的关系数据库不再强制完整性,你就会打开一堆新的蠕虫。 :)