Управление версиями на столе с внешними ключами - PullRequest
0 голосов
/ 15 апреля 2019

Предположим, у меня есть 3 таблицы,

Column(ID(Primary Key),name, created_by, description(FK), table_name)

ID | name | created_by | description | table_name
------------------------------------------
1  | c1   | nobody     | 1           | A
------------------------------------------
2  | c2   | abc        | 2           | B

Description(ID(Primary Key), data)

ID | Data
---------
1  | description1
---------
2  | description2

Formula(ID(Primary Key, name, column_id(Foreign Key))

ID | Name | column_id
---------------------
1  | f1   | 1
---------------------
2  | f2   | 2

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

Я планирую построить основную таблицу, в которой будут столбцы, подобные этому,

History_Column(ID(Primary Key), column_id, column_created_by, column_edited_by, column_desc, column_table_name, formula_name)

ID | column_id | column_created_by | column_edited_by | column_desc   | column_table_name | formula_name
------------------------------------------------------------------------------------------------------
1  | 1         | nobody            | nobody           | description1  | A                 | f1
2  | 2         | abc               | abc              | description2  | B                 | f2
3  | 1         | nobody            | abc              | changed_data  | A                 | f1
4  | 1         | nobody            | cde              | changed_data  | B                 | f1

Description(ID(Primary Key), data)

ID | Data
---------
1  | changed_data
---------
2  | description2

Column(ID(Primary Key), created_by, edited_by, description(FK), table_name, version_id)

ID | created_by | edited_by | description | table_name | version_id
--------------------------------------------------------------------
1  | nobody     | cde       | 1           | B          | 3
2  | abc        | abc       | 2           | B          | 1 

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

Это хороший подход, я не уверен, как обращаться с внешними ключами на месте. Может кто-нибудь помочь мне решить эту проблему?

...