• ベストアンサー

主キー以外の項目にNotNull制約をつける理由について

nihon_no_samuraiの回答

回答No.1

プログラム側でチェック処理が常に完全に行われればよいですが、 その保証はありません。DB側でNOT NULLであれば、NULLであった 場合例外が発生しますので、絶対的なチェックの保証ができます。 チェックはプログラム側のみでよいというのであれば、それは 個人の判断になると思います。 プログラムとDBのほうでチェックを2重にすれば完璧です。

noname#53515
質問者

補足

回答ありがとうございました。 また、今回の質問の意図からずれてしまうのですが、 上記の内容について教えていただけたら幸いです。

関連するQ&A

  • NOT NULL制約がついた項目のUPDATEについて

    基本的な事で申し訳ありません。 Oracle10g を使用していますが、 SQLのUPDATE文で主キーではない、 NOT NULL 制約がついたVARCHAR2(30)の項目を ''(ブランク)で更新しようとした所エラーが返されました。(ORA-01407) NULLで更新するのではないから大丈夫かと思っていたんですが、 NOT NULL 制約がついているとブランクでも更新ができないのでしょうか?

  • NOTNULL制約について

    MYSQL ver4.0.20a 下記のようにNOTNULL制約を付けてテーブルを作成するのですが、 デフォルト値が勝手に設定されてしまいます。 CREATE TABLE TEST_01 ( NO int(8) NOT NULL auto_increment, STATUS int(1) NOT NULL, TOUROKUBI date NOT NULL, MEMO varchar(200) NOT NULL, PRIMARY KEY (NO) INT型だと 0 varchar型だと '' date型だと 0000-00-00 インサートの時に値がNULLの場合、SQLエラーを返してほしいのですが、 デフォルト値が設定されている為、登録されてしまいます。 本当はNOTNULL制約で、DBにチェックを任せたいのですが・・・ どなたかご存知の方、教えてください。 お願いします。

    • ベストアンサー
    • MySQL
  • オラクルのNOT NULL制約は列レベルでのみ定義

    オラクルのNOT NULL制約は列レベルでのみ定義出来る という制約はなぜですか? 表レベルだと何か不都合があるのでしょうか?

  • varchar型を主キーに…

    現在サーブレット/JSPを利用してDBにユーザアカウントを登録、削除、更新、一覧をできるようするシステムを作成しています。 テーブルを create table loginuser ( userId char(16) not null default '', passwd char(16) not null default '', name varchar(50) not null default '', accessFlg int(1) not null default '0', primary key(userId)); で作成しました。 IDが数字の時はDBに登録ができるのですがIDに文字を入力するとDBに登録されません。 主キーをvarchar型で使用するのは不可能なのでしょうか? ご返答をよろしくお願いします。

  • 主キーの位置

    こんにちわ。 MDBでテーブル設計するときに, 主キーとなる項目は,テーブルのどの位置に定義しても 影響はないのでしょうか? やはり先頭が一般的かと思われますが, 最後尾に定義すると何か不都合などあるでしょうか? なおORACLEではどうでしょうか? 教えてください。お願いします。

  • テーブルのどの項目が主キーか判断する方法

    SQLで、  desc table1 と入力するとテーブルの項目名、NOT NULLの有無、型を表示させることができますが、 同じような表示形式で主キーかどうかを確認することはできますか? ご存知の人がいましたら教えてください。

  • プライマリキー(主キー)を貼る際の注意は

    初歩的な事を聞かせて下さい。 テーブルを作成しました。 テーブルの項目は以下の通りです。 連番 コード 名前 カタカナ パスワード メールアドレス 所属 権限 削除フラグ 作成者 作成日 更新者 更新日 プライマリキー(主キー)を貼る際の注意は有りますでしょうか。 私自身、プライマリキーはユニーク項目に貼るという認識していますが間違っていますでしょうか。 また、一つのテーブルにプライマリキーって貼る事はできますかっていうか貼る事ができるんでしょうか。 くだらない質問をしている事は重々、承知していますが自身がありません。 申し訳ありませんがアドバイスいただけませんでしょうか。 皆さん、ご教授宜しくお願いします。

  • MySQLで0以外をユニークにする制約をかけたい

    MySQLで主キーのidの他にfoofoo_idというint型カラムがあります。 このfoofoo_idを0以外をユニークしたいのですが可能でしょうか? MySQLのバージョンは8.0.21です。 検索をかけたところNULL以外をユニークにするという記事を見つけたので、下記のようにNULLではなく0にしてみましたが、そもそもWHEREの部分がダメのようで通りませんでした。 CREATE UNIQUE INDEX uq_foofoo_id ON `hogehoge`.`sample`(foofoo_id) WHERE foofoo_id IS NOT '0' ;

    • ベストアンサー
    • MySQL
  • 主キーに重複があるレコードの登録について

    ORACLEを使用していますが、 主キーに重複があるレコードの登録は可能でしょうか? ちなみにDDLには、「ONSTRAINT インデックス名 PRIMARY KEY」の構文を記述しています。 また、登録できないとすれば、どのようにDDLを修正すれば良いでしょうか?

  • Accessから主キーの無いOracleテーブルにVBAで主キー設定付のODBC接続するには

    Oracle7--------------- Access97 Workgroup Server Release 7.3.2.2.1 TABLE_A----------------ODBC接続(リンクテーブル)     項目1 項目2 項目3 項目4 項目1~項目4は 空白レコードがあり 主KEYが張れない ******************************************************************** 主キーの作成出来ないオラクルテーブルがあります。 Access97からODBC接続を作成する時は (1)マニュアルであれば   対象テーブルに主キーが無ければ 任意の10項目を仮の主キーとして設定出来ますが (2)VBA(自動?)で リンク張ると Dim tab01 As TableDef  Dim db01 As Database  Dim strTABname As String strTABname = TABLE名 Set db01 = CurrentDb Set tab01 = db01.CreateTableDef(UserName & "_" & strTABname, dbAttachSavePWD) tab01.SourceTableName = UserName & "." & strTABname tab01.CONNECT = "ODBC;DSN=****;UID=" & UserName & ";PWD=" & Password & ";ConnectString=con;" db01.TableDefs.Append tab01 主キー設定の無いODBC接続が出来て   データの更新などが出来なくなります。 VBAでも仮の主キー設定付きのODBC接続は  出来ないでしょうか?