在SQLite中建模一对多关系

时间:2015-06-06 09:11:24

标签: android sqlite

我的数据库中有两个表; debtdebtor。我希望只有一行代表一个特定的债务人,然后在添加新债务时更新列(totalDebts,totalAmountOwed)。债务表可以包含许多引用特定债务人的列。我已经使用了在将债务作为债务和债务人表的主要关键字时提供的电话号码,并且表格的添加没有问题:

 try {

            debt.setCustomerName(params[0]);
            debt.setCustomerPhone(params[1]);
            debt.setItemName(params[2]);
            debt.setUnitPrice(Double.parseDouble(params[3]));
            debt.setItemQuantity(Integer.parseInt(params[4]));
            debt.setAmountPaid(Double.parseDouble(params[5]));
            debt.setAmountDue(Double.parseDouble(params[6]));
            debt.setDueDate(params[7]);

            debtor.setDebtorName(params[0]);
            debtor.setPhoneNumber(params[1]);
            debtor.setTotalAmountOwed(Double.parseDouble(params[6]));
            debtor.setTotalDebts(0);


            databaseHandler.addDebt(debt);

            databaseHandler.addDebtor(debtor);

            dabaseHandler.close(); //close the database connection

这是我添加记录时的结果:

Debtor table

和债务表: enter image description here

我的问题是这些:

  1. 由于我不能添加两个与Id相同的电话号码的债务人记录,如何在债务人记录已经存在时更新该行?
  2. 如何在这两个表之间创建关系,以便我可以运行查询来获取属于特定债务人的债务?
  3. 非常感谢任何帮助我的伪代码。

1 个答案:

答案 0 :(得分:0)

至1:    您必须执行更新查询,您可以尝试这样的事情:

public void createDebtor(Debtor debtor){
      try{
         bd.execSQL("INSERT INTO....");
      }catch(SQLException){
         bd.exectSQL("UPDATE...");
      }
  }

到2:     我认为你必须在新表中添加一个新的colummn(使用你的引用表id),然后在db中添加新的约束。添加新约束的sql语句是:

ALTER TABLE a CONSTRAINT FOREIGN KEY name REFERENCES table(column)