mysql - 数据库设计 : force a child table to populate with predefined data when the parent record is created

标签 mysql sql database-design constraints

我希望这不会是一个太广泛或太主观的问题(如果是请纠正我)但是用必须的数据填充子表的行的最佳实践或最理想的方法是什么创建父记录时是否存在?

我遇到过这样的事情Database structure 过去(这不是真正的数据库设计,这只是我在 MySQL Workbench 中拼凑的东西,目的是给你一个大概的想法。我知道其中有错误)

当测试应用于“样本”时(即,一条记录被添加到“SampleTest”表中),构成该测试的所有“组件”都需要添加到“SampleResult”表中,几乎与如果“测试”和“组件”表包含“SampleTest”和“SampleResult”表的模板。

当对样本进行测试时,确保“SampleResult”表填充所需的所有记录的最佳方法是什么?

示例数据:

Test 表包含名为 Metals 的测试。

Metals 测试由多个Component 记录组成; 等...

通过向 SampleTest 表中添加一条记录,将 Metals 测试添加到样本中。

那时 SampleResult 表需要有链接到三个组件的记录;

这应该由数据库本身处理还是这是一个前端问题?

最佳答案

这两个选项是:

  1. trigger的形式在数据库中实现,触发器看起来像这样:

    CREATE TRIGGER ins_test_components 
        AFTER INSERT ON SampleTest
    FOR EACH ROW
    BEGIN
        INSERT INTO SampleResult (component_id, ...)
        SELECT components.id, ...
        FROM Components, Test
        WHERE Test.id = NEW.Test_id
    END
    

    上面的触发器将插入 id 位于插入 SampleTest 的 NEW 行中的所有测试组件。

    这是一个 tutorial在触发器上。

  2. 在应用程序中实现它,但要确保它是在事务中构建的,这样如果出现问题,整个事情就会中止,数据库将保持一致的状态。这绝对不是前端问题,因为您需要在数据库表中添加内容作为另一个 INSERT 的副作用。

关于mysql - 数据库设计 : force a child table to populate with predefined data when the parent record is created,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43622287/

相关文章:

database - 传感器数据的数据库设计(大量数据)

PHP 1-liner each() 和 mysql_fetch_assoc()

sql - 这个查询该怎么做呢?

mysql - 如何在 MySQL 中进行递归 SELECT 查询?

sql - 我应该在每个表中都有标识列吗?

database - 更新表后如何重建索引?

PHP 检查表单是否已经使用 num rows 提交

mysql - 转换mysql数据库支持多国语言

php - 警告 : join() [function. join]:传递的参数无效(PHP/MySQL 查询)

Sql Oracle 12c 触发器