更新多行可能已成为obs的表数据

2024-04-26 21:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个应用程序,我可以创建和编辑配方组成的成分和他们的数额。这些信息应该保存在关系数据库(可能是MySQL或SQLite)中。我有一个用自动递增主键存储菜谱的表,还有一个保存配料和数量的表,通过外键约束引用第一个表。你知道吗

现在我想在我的应用程序中编写更新代码。我把菜谱id保存在我的菜谱对象中,所以我可以很容易地引用它。但是我如何正确地更新成分和数量呢?第二个表的多个行可能已经过时,必须删除,有些行只需要更新(更改金额时)。你知道吗

我想到的最简单的解决方案就是删除所有引用我当前配方的行,然后重新插入它们。这是一种可接受的方法,还是有解决此类问题的模式/最佳实践?你知道吗


注意:我知道我可以在varchar stringlist中保存成分和数量,但是我想使用某种表结构。你知道吗


编辑:表格创建代码:

CREATE TABLE `recipe` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(30) NOT NULL
    PRIMARY KEY (`id`)
)

CREATE TABLE `recipe_ingredients` (
    `recipe_id` INT(11) NOT NULL,
    `ingredient` VARCHAR(30) NOT NULL,
    `amount` FLOAT NOT NULL,
    `measurement_unit` VARCHAR(10) NOT NULL,
    INDEX `recipe_id` (`recipe_id`),
    CONSTRAINT `recipe_ingredients_ibfk_1` FOREIGN KEY (`recipe_id`) REFERENCES `recipe` (`id`),
    CONSTRAINT `recipe_ingredients_ibfk_2` FOREIGN KEY (`recipe_id`) REFERENCES `recipe` (`id`)
)

Tags: key代码id应用程序编辑数量create配方
1条回答
网友
1楼 · 发布于 2024-04-26 21:25:01

将自动递增主键添加到配料表中。然后,当应用程序发布更新时,您就可以通过主键识别正在更新的成分。你知道吗

我会像这样添加PK:

CREATE TABLE `recipe_ingredients` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `recipe_id` INT(11) NOT NULL,
    `ingredient` VARCHAR(30) NOT NULL,
    `amount` FLOAT NOT NULL,
    `measurement_unit` VARCHAR(10) NOT NULL,
    PRIMARY KEY (`id`)
    INDEX `recipe_id` (`recipe_id`),
    CONSTRAINT `recipe_ingredients_ibfk_1` FOREIGN KEY (`recipe_id`) REFERENCES `recipe` (`id`),    
)

在您的UI中,您将遍历配料并将它们显示在单独的行中,配料id与每一行相关联。它可能看起来像这样:

<table>
  <thead>
    <tr>
      <th>Ingredient</th>
      <th>Amount</th>
      <th>Units</th>
    </tr>
  </thead>
  <tdata>
    <tr>
      <td>
        <input type='hidden' id='ingredient1_id' value='1' />
        <input type='text' id='ingredient1_name' value="salt" />
      </td>
      <td>
        <input type='text' id='ingredient1_amount' value="2" />
      </td>
      <td>
        <input type='text' id='ingredient1_unit' value="tsp" />
      </td>
    </tr>
    <tr>
      <td>
        <input type='hidden' id='ingredient2_id' value='2' />
        <input type='text' id='ingredient2_name' value="flour" />
      </td>
      <td>
        <input type='text' id='ingredient2_amount' value="3" />
      </td>
      <td>
        <input type='text' id='ingredient2_unit' value="cups" />
      </td>
    </tr>
  </tdata>
</table>

现在,如果用户编辑或删除salt行,您就知道它是id为1的配料,您可以在数据库中识别它。你知道吗

相关问题 更多 >