質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

2回答

1048閲覧

DBのテーブル設計 PKにuuidを使う場合の仮データ作成方法について

aoju

総合スコア1

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

1クリップ

投稿2022/08/30 08:11

DB、特にuuidを使っている人に聞きたいのですが、プライマリキーをuuid(またはulid)にしている場合、レコード生成後しかその値がわからないので、以下のような問題をどう解決すればいいのか教えてほしいです

例えばレコード生成前にデータを投入する仮データをSpreadsheetとかで管理する場合、そのuuidを他テーブルのリレーションキーとして使っているときに、なんかしら仮のIDをいれておかないとリレーション状態がわから無くてレコード管理ができないと思うんです

例えば下記サイトのように、他のカラムにそのカラムの一意性がわかるようなカラムを追加するなどの対応も考えています

4 整数の主キーを持つ

UUIDを使用していたり、それが意味をなさない場合(結合テーブルの場合など)でも、自動インクリメントの整数列を持つ標準的なidカラムを追加します。このようなキーがあると、グループの最初の行だけを選択するなど、特定の分析が非常に簡単になります。

また、インポートジョブでデータが重複してしまった場合、特定の行を削除することができるので、このキーは非常に役立ちます:

https://sisense.gaprise.jp/blog/0032

が、無駄にデータを増やしてパフォーマンスを悪くしているような気もしていまいち何がいいのかわからないので、知見のあるかた、このようにするといいよというのがあれば教えて下さい

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

uuidなんだからクライアント側で勝手に生成しちゃって、それをinsertすればいいのでは?
各々が勝手に作成してもぶつからないのがuuidの利点でしょう?

投稿2022/08/30 09:59

matukeso

総合スコア1590

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoju

2022/08/30 10:43

解答ありがとうございます たしかにそうでした、データ作成時の gen_random_uuid 関数を使わなければいけない、と思い込んでいたのでuuid v4のロジックをクライアント側で使ってその値をそのままinsertすれば良さそうですね!
guest

0

リンク先は、ナチュラルキーではなくサロゲートキーをお薦めしている訳です。

他のカラムにそのカラムの一意性がわかるようなカラムを追加するなどの対応も考えています
無駄にデータを増やしてパフォーマンスを悪くしているような気もして

1カラム増えた程度で、パフォーマンスが悪くなるような事はありませんし、結合まで考えると、UUIDよりサロゲートキーを採用する方が効率的だと思います。

レコード生成前にデータを投入する仮データをSpreadsheetとかで管理する場合、そのuuidを他テーブルのリレーションキーとして使っているときに、なんかしら仮のIDをいれておかないとリレーション状態がわから無くてレコード管理ができないと思うんです

仮では無くて、UUID以外の一意になるデータを決定しないと結局管理は出来ないですよ。
UUIDはあくまでメタデータとして考えると良いのではないかと思います。

投稿2022/08/30 08:49

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoju

2022/08/30 10:51 編集

解答ありがとうございます > リンク先は、ナチュラルキーではなくサロゲートキーをお薦めしている訳です。 UUIDもそれを見ただけではなんのデータかわからないため、ナチュラルキーではなくサロゲートキーと認識しています なので > 1カラム増えた程度で、パフォーマンスが悪くなるような事はありませんし、結合まで考えると、UUIDよりサロゲートキーを採用する方が効率的だと思います。 UUIDよりサロゲートキーを、という下りがわからないのですがたしかに1カラム増えた程度でパフォーマンスに影響が出ることもないのでカラムの追加を行ってみて、ありなしで比較してみようと思います > 仮では無くて、UUID以外の一意になるデータを決定しないと結局管理は出来ないですよ。 > UUIDはあくまでメタデータとして考えると良いのではないかと思います。 こちらはmatukesoさんの提案でのクライアント側で先に生成してその値で管理すればいいような気がしましたが、あくまでUUIDをPKとしてではなくメタデータとしての管理をするメリットはありますでしょうか ※今回はたまたまPostgresqlを使っていて下記サイトからidにはuuidを推奨しているような記述を見て、 gen_random_uuid() という UUID v4 の生成関数も標準で提供されていたので、PKにしようとした経緯があります https://siguniang.wordpress.com/2013/03/17/stop-using-numbers-as-ids-just-use-uuids/
sazi

2022/08/30 13:12 編集

uuidありきかと思って回答しましたけど、主キーにuuidを採用するか否かという趣旨の様ですね。 > 仮データをSpreadsheetとかで管理する > クライアント側で先に生成してその値で管理すれば クライアント毎のシステムなら理解できますけど、サーバーで管理するなら集中させないと色々不都合が生じそうですけどね。 敢えてそうまでしてuuidに拘らなければいけない背景があるなら別ですけど。 また、他のシステムと連携するのにUUIDを使用するような場合は主キーにする意味はありますけど、そういった連携が少ないシステムではメタデータ扱いで十分だと思います。 uuidをメタデータ扱いにし、数値型のサロゲートキーを採用する場合のメリットとしては容量とレスポンスですね。
aoju

2022/08/31 02:41

解答ありがとうございました たしかにサーバー管理の場合は2重管理でいつか不整合が出そうな気もしてきました 今回は初回だけのデータ投入としてSpreadsheetで管理し、それ以降はサーバーで管理する想定なので初回データだけはSpreadsheetのapp scriptでuuid v4生成関数を作って入れ込むようにしたいと思います > また、他のシステムと連携するのにUUIDを使用するような場合は主キーにする意味はありますけど、そういった連携が少ないシステムではメタデータ扱いで十分だと思います。 今後firestoreや他nosqlへのデータ転用・レプリケーションを考えていたため、uuidを主キーにすると都合が良かったというのもありました おっしゃるとおりそのような連携が少ない場合はメタデータ扱いで十分そうですね ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問