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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

20928閲覧

idカラムにつけるべき型は? UNSIGNEDはつける?

ikuwow

総合スコア462

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

6クリップ

投稿2014/07/23 09:13

idカラムにつける制約で悩んでいます。ベストプラクティスとしてどの制約をつけるべきなのでしょうか?

特にUNSIGNEDをつけるべきかについてです。これまでUNSIGNEDのついてないただのINTになっているカラムをよく見てきたので、負の値のidも許すべきなのか、など、判断に迷っています。

MySQLではSERIALという "BIGINT UNSIGNED NOT NULL AUTO INCREMENT UNIQUE"と同義のカラムがありますが、これはidカラムに無思考に使ってしまって良いものでしょうか?

いろいろ疑問がまとまっていませんが、お助けいただければと思いますm(_ _;)m

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

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

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

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

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

guest

回答2

0

ベストアンサー

個人的な意見というか、私はこうです、という内容です。
SQLはそれなりに使うのですが、MySQLは使ったことがある程度なのでズレてたらごめんなさい。

IDの列は、テーブルを一意に複合キーでなくひっぱれるキーだったり、管理上扱いやすいなどの理由でつくる列だと思います。
この場合、UNSIGNED、マイナスも許容する列にする必要は私はないかな、と考えます。

また、SERIALという設定もしくはBIGINTに設定するかは、h_sakuraiさんがおっしゃっているとおり、データ件数が読めるならその値に適した+ちょっと余裕くらいの型でなるべく小さくすべきだと考えています。
MYSQLはリファレンスからみるとINTで2,147,483,647とありましたので、それ以上が必要なのはよほど大きなお金を扱うシステムなどの金額でしか、BIGINTはどのDBでも出番はないかな、と思います。
経験としては金融とビルの購入などのシステムで使ったくらいです。

ID列にかぎりませんが、データベースで制約できたりする面は基本やったほうが、プログラムでのミス防止にもなりますし、やったほうが良いかと思います。
反面、わからない、現段階では決められないのであれば、許容してしまうしかありません。

データ量にもよりますが、最近のDBMSだと、こういった設定で大きなパフォーマンスの差とはなりにくいとも思います。(こういうこと書くと怒られるかな^^;)

投稿2014/07/23 10:03

disc_7

総合スコア100

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

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

0

ベストプラクティスは知りませんが、UNSIGNEDを付けないほうがよいパターンを考えると
値が上下するカラムでプログラムのバグでマイナス値になるような事がありそうであれば
UNSIGNEDは付けない方が無難でしょう。さもないととてつもない大きな値になってしまいます。
後は、IDの最大値の予測が付くのならサイズは小さい方が良いです。
いくらでも増えるならBIGINT UNSIGNEDにするのが良いでしょう。
なにかしら、マイナスに意味を持たせる可能性がある場合もUNSIGNEDにしない方が良いでしょう。

投稿2014/07/23 09:26

h_sakurai

総合スコア228

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

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

ikuwow

2014/07/23 12:21

さすがにBIGINTは大きすぎる場合が多いですよね。SERIALはBIGINTになってしまう、という理由で採用は見送ることにします。UNSIGNEDは負にする可能性がなさそうなので採用することにします。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問