我希望这不会是一个太广泛或太主观的问题(如果是请纠正我)但是用必须的数据填充子表的行的最佳实践或最理想的方法是什么创建父记录时是否存在?
我遇到过这样的事情Database structure 过去(这不是真正的数据库设计,这只是我在 MySQL Workbench 中拼凑的东西,目的是给你一个大概的想法。我知道其中有错误)
当测试应用于“样本”时(即,一条记录被添加到“SampleTest”表中),构成该测试的所有“组件”都需要添加到“SampleResult”表中,几乎与如果“测试”和“组件”表包含“SampleTest”和“SampleResult”表的模板。
当对样本进行测试时,确保“SampleResult”表填充所需的所有记录的最佳方法是什么?
示例数据:
Test
表包含名为 Metals
的测试。
Metals
测试由多个Component
记录组成; 砷
、铁
、铝
等...
通过向 SampleTest
表中添加一条记录,将 Metals
测试添加到样本中。
那时 SampleResult
表需要有链接到三个组件的记录; 砷
、铁
和铝
。
这应该由数据库本身处理还是这是一个前端问题?
最佳答案
这两个选项是:
以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在触发器上。
在应用程序中实现它,但要确保它是在事务中构建的,这样如果出现问题,整个事情就会中止,数据库将保持一致的状态。这绝对不是前端问题,因为您需要在数据库表中添加内容作为另一个
INSERT
的副作用。
关于mysql - 数据库设计 : force a child table to populate with predefined data when the parent record is created,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43622287/