【发布时间】:2021-08-18 11:05:47
【问题描述】:
我有一个包含多个必须审核的表的数据库。
例如,我有一个对象表,其中定义了唯一的 ID、名称和描述。
名称将始终相同。无法更新它。 “ObjectA”永远是“ObjectA”。
如您所见,名称在数据库中不是唯一的,而只是在逻辑中。
“from”、“to”和“creator_id”行用于审核更改。 “from”是更改的日期,“to”是添加新行的日期,当它是最新行时为空。 “creator_id”是进行更改的用户的 ID。
+----+----------+--------------+----------------------+----------------------+------------+
| id | name | description | from | to | creator_id |
+----+----------+--------------+----------------------+----------------------+------------+
| 1 | ObjectA | My object | 2021-05-30T00:05:00Z | 2021-05-31T05:04:36Z | 18 |
| 2 | ObjectB | My desc | 2021-05-30T02:07:25Z | null | 15 |
| 3 | ObjectA | Super object | 2021-05-31T05:04:36Z | null | 20 |
+----+----------+--------------+----------------------+----------------------+------------+
现在我有另一个表,它必须有一个基于“唯一”对象名称的对象表的外键。
+----+---------+-------------+
| id | foo | object_name |
+----+---------+-------------+
| 1 | blabla | ObjectA |
| 2 | wawawa | ObjectB |
+----+---------+-------------+
如何在这两个表之间创建此链接?
我已经尝试使用 uuid 创建另一个表,并在对象表中添加一列“unique_identifier”。然后外键将链接到这个 uuid 表而不是对象表。问题是我有多个表存在这个问题,我将不得不创建双倍数的表。
也可以使用对象 ID 作为 FK 而不是名称,但这意味着我必须在更新对象时使用新 ID 更新具有该 FK 的每个表。
【问题讨论】:
-
你没有清楚地说明你想要完成什么。解释“在这两个表之间创建此链接”是什么意思。您没有说对有效数据库状态的限制是什么。您说“外键”,但不清楚您的意思是什么 FK,或者为什么您不只是声明 FK 并且似乎您甚至可能不是在谈论 FK,而是在说“FK”时您的意思是其他意思让你想起FK。 minimal reproducible exampleHow to AskHelp centerPS“在逻辑上”不清楚。 PS 允许 NULL 的子行不太可能适合作为 SQL 中的唯一标识符,尤其是这样的子行不能匹配 FK。
标签: sql foreign-keys azure-sql-database audit