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

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

新規登録して質問してみよう
ただいま回答率
85.37%
PostgreSQL

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

データベース設計

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

Q&A

解決済

6回答

21460閲覧

主キーに空文字はありですか?無しですか?

sayusayu

総合スコア18

PostgreSQL

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

データベース設計

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

0グッド

0クリップ

投稿2018/11/12 06:29

PostgreSQLに作成したテーブルにデータ作成時、主キーに空文字を登録できたのですが、これってありですか?

私の上司、先輩だとしてアドバイスお願いしますm(__)m

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

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

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

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

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

guest

回答6

0

私の上司、先輩だとしてアドバイスお願いします

・どういう場合に空文字が発生するの?
・空文字とそうでない場合は識別したりするの?
・そのデータはCSVなどの入出力はあるの?

先輩や上司だったら、アドバイスより前に背景を質問しないと駄目な質問に突っ込みます。

コメントに対して追記

取り込もうとするcsvデータで、その項目が未指定の場合、空文字(ブランク)となります

・CSVで行う処理は追加のみですか?変更もありますか?
・変更がある場合、空白の扱いはどうなりますか?

投稿2018/11/12 06:58

編集2018/11/12 07:25
sazi

総合スコア25300

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

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

sayusayu

2018/11/12 07:07

ご回答ありがとうございます。 ・どういう場合に空文字が発生するの? →取り込もうとするcsvデータで、その項目が未指定の場合、空文字(ブランク)戸なります ・空文字とそうでない場合は識別したりするの? →識別します。例えば、登録済みデータを検索して画面表示する際、件数が多ければ抽出条件を指定します。 ・そのデータはCSVなどの入出力はあるの? →csvから取り込みます。その際、入力チェックや値の補正を行います。 ※主キー項目が空文字(ブランク)なのはエラーではありません。主キー項目全部が空文字は駄目ですが。
sayusayu

2018/11/12 07:37

ご回答ありがとうございます。 ・CSVで行う処理は追加のみですか?変更もありますか? →頻度は少ないですが、変更もあります。 ・変更がある場合、空白の扱いはどうなりますか? →画面にて変更する機能を用意しますが、ユーザーはその項目を未指定とするとき、空文字(ブランク)とします。
sazi

2018/11/12 07:59 編集

CSVの取込処理で、変更があるなら、その空白を変更されると、一致させられなくなるのはないですか? そうであるなら取込時に連携するキーに含める事はできませんね。
sazi

2018/11/12 08:00

通常、更新が非同期であるデータの連携においては、変更前のキーなどを準備する必要があります。
guest

0

NULLじゃなければ問題ないですが、デメリットしかないでしょうね

投稿2018/11/12 06:48

yambejp

総合スコア116443

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

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

sayusayu

2018/11/12 06:50

回答ありがとうございます。 ちなみにデメリットで思いつくものを教えていただけませんか?
yambejp

2018/11/12 07:24 編集

見た目で簡潔(typo修正)に識別できない主キーは、主キーの役割(レコードの特定)をはたせません したがって数値型などブレが少ないもので指定することが多いです (文字列型はスペースやタブなどが紛れても識別しにくいため)
sayusayu

2018/11/12 07:08

回答ありがとうございます。 たしかにそうですね。
guest

0

ベストアンサー

ありかなしかで言えばありですが、主キーはレコードを一意に特定するためのものなので、空文字のような特殊な文字を登録するメリットはちょっと思いつきません。
誤動作の元となるのでやめた方が良いと思います。

投稿2018/11/12 06:35

ssasaki

総合スコア1167

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

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

0

RDBMS によっては主キーに全く null を許さないという制約を持つ場合があります。
少なくとも単一カラムからなる主キーではどの RDB でも null は許容されませんが、複数カラムからなる場合に、どこまでnullを許容するかが異なってきます。
※MS SQL Server は主キーを構成するカラムすべてが NOT NULL 制約を持つことを要求しますが、MySQL や PostgreSQL はそこまで要求しません。

また null があるとインデックスが効きにくくなり、主キーのもつ高速アクセス(一意であるが故に)と言う恩恵が失われてしまう場合もあります。

投稿2018/11/12 08:18

tacsheaven

総合スコア13703

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

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

0

空白が半角文字だったり、全角文字だったり、半角全角が混じっていたりで事故の元になり易いですから、お勧めはしません。

投稿2018/11/12 06:37

Orlofsky

総合スコア16417

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

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

0

主キーは通常、「自動生成する番号」「GUIDなど桁数の決まった文字列」「コード値となる文字列」などを使うものですので、空文字列を入れられるテーブル構造自体が、あまり良くないとは思います。

投稿2018/11/12 06:31

maisumakun

総合スコア145930

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問