回答編集履歴

1

テーブル設計の改善案

2022/07/05 06:17

投稿

kaz.Suenaga
kaz.Suenaga

スコア2037

test CHANGED
@@ -35,3 +35,36 @@
35
35
  | NO-00200 | 01|
36
36
  | NO-00100 | 01|
37
37
 
38
+
39
+
40
+
41
+ # [追記] 生成列
42
+
43
+ 本題ではないですが、テーブル設計に後悔があるようなので一案です。
44
+
45
+ PostgreSQL 12 以降、生成列という仕様があります。
46
+ 別の列の値を元に機械的に算出される列をテーブルに定義できる、というものです。
47
+
48
+ これを利用して、 FullId 列から VersionId 列、FixId 列を生成列として定義してはいかがでしょうか。
49
+
50
+ 例)
51
+
52
+ ```
53
+ -- VesionId 列を生成
54
+ -- FullID から ShortId 置換(削除)して、 - を区切りにで配列化した1つ目の要素
55
+ ALTER TABLE [使っているTABLE名] ADD COLUMN VersionId text
56
+ GENERATED ALWAYS AS (
57
+ (REGEXP_SPLIT_TO_ARRAY(REPLACE(FullId, ShortId, ''), '-'))[1]
58
+ ) STORED;
59
+
60
+ -- FixId 列を生成
61
+ -- FullID から - を区切りにで配列化した3つ目の要素
62
+ ALTER TABLE [使っているTABLE名] ADD COLUMN FixId text
63
+ GENERATED ALWAYS AS (
64
+ (REGEXP_SPLIT_TO_ARRAY(FullId, '-'))[3]
65
+ ) STORED;
66
+ ```
67
+
68
+ 上記により VersionId 列、 FixId 列が追加できるかと思います。
69
+
70
+ これができてしまえばあとは単純なクエリが作れるようになるのではないでしょうか。