Правильный способ обновления родительского ключа в дочерней таблице для нескольких строк после обновления в родительской

У меня есть 2 таблицы, которые по существу имеют отношения родитель-потомок. Таким образом, в дочерней таблице есть столбец, который ссылается на первичный ключ родительской таблицы.

В двух словах, родительская таблица похожа на агрегацию дочерней таблицы, где каждая строка родительской таблицы содержит сумму данных группы строк в дочерней таблице, а в дочерней таблице каждая строка в этой группе относится к «суммированному /total" в родительской таблице.
Теперь я не знаю, как правильно это смоделировать.

Я имею в виду, что я вставляю строки в дочернюю таблицу, позволяя столбцу для родительского ключа быть NULL (шаг 1).

Затем, когда пришло время добавить/суммировать строки, я вставляю новую запись в родительскую таблицу (шаг 2) с общим количеством групп, которые мне удалось собрать.

Теперь у меня возникла проблема (шаг 3): как обновить дочерние строки с родительским идентификатором, созданным только что вставленной строкой?

На данный момент я также не знаю идентификаторы строк, которые я суммировал.

Должен ли я выбирать идентификаторы строк, а затем обновлять эти строки, чтобы заменить NULL новым родительским идентификатором? Должно ли это быть внутри транзакции?

Я делаю это неправильно? Должны ли эти шаги происходить автоматически из-за ограничений?


person Jim    schedule 02.12.2013    source источник
comment
Можете ли вы дать нам больше информации? Данные, таблицы например?   -  person T0to    schedule 02.12.2013
comment
@T0to: Очень просто. 2 таблицы, одна ссылается на другую. В таблице A есть столбец amount, а в таблице B есть столбец total_amount. Группы строк в таблице A суммируются по amount и заполняются total_amount в таблице B.   -  person Jim    schedule 02.12.2013


Ответы (2)


Ваши шаги должны быть

1. Insert into parent table and get the parent id (Guessing auto increment) in a variable. 
    At this time, your sum field would be 0/null. (This calculation should have happened prior to insert ideally.)
2. Insert into child table along with the parent id. 
3. Get the sum of all fields (Based on your requirement) based on the parentID
4. Update back the parent table with the patientID. 


Это вы ищете? Я пропустил что-то очевидное?

person Akhil    schedule 02.12.2013
comment
Проблема в том, что строки вставляются заранее в дочернюю таблицу. Таким образом, строки уже существуют с родительским идентификатором NULL. Затем, когда я вставляю строку с суммой в родительскую таблицу, мне нужно заменить этот NULL идентификатором родителя. Так что это не те шаги, которые вы на самом деле упоминаете - person Jim; 02.12.2013
comment
Я только что упомянул стандартный способ решения этой проблемы. Решение находится внутри самого вашего вопроса. Родительский элемент должен быть вставлен перед дочерним. Если вы вообще не можете этого сделать по какой-либо причине, вам нужно сгенерировать GUID и использовать его в качестве временного идентификатора в дочерней и родительской таблицах только для сопоставления. - person Akhil; 02.12.2013

На самом деле это большая вещь в дизайне. Это зависит от того, с какой точки зрения вы ищете ответы.

во-первых, в проекте должно быть четко указано, что целостность должна поддерживаться между родительским

и дочерний стол.

См. приведенный ниже пример,

Если ниже находится дочерняя таблица в любое конкретное время.

ID Значение 1 3

1 1

1 3

2 3

2 5

2 1

3 2

3 6

3 4

Родительская таблица должна выглядеть так

ID Значение 1 7

2 9

3 12

Вы должны четко указать, что должно произойти, если строка удалена/обновлена ​​из дочернего или того же с родительским.

Теперь

С точки зрения разработки вам нужны триггеры.

Предположим, что новый идентификатор вставлен в дочернюю таблицу, тогда запись должна быть вставлена ​​​​в то же время в родительскую таблицу.

Точно так же обновления и удаления должны быть распространены на родительский элемент, а удаление родительского элемента должно быть распространено на дочерний элемент.

Пожалуйста, дайте мне знать в случае любого другого запроса.

person Ashutosh Arya    schedule 02.12.2013
comment
Suppose a new Id is inserted in child then a record must be inserted at the same time in parent table. Не совсем, так как это только агрегаты - person Jim; 02.12.2013