- ベストアンサー
主キー以外の項目にNotNull制約をつける理由について
あるプロジェクトで OracleにアクセスするJavaのプログラムを書いています。 使用しているテーブル定義は、 主キーでも何でもない項目ほぼ全てにNotNull制約が付いています。 別にNotNull制約を除けば主キー以外の制約は何もありません。 これからつく予定もありません。 そこでふと、 各項目の入力値は全てプログラム側でチェックしていますので プライマリキーや共通のフッタ部分(登録日、登録ProgramIDなど)を除けば Not Null制約は全くいらないんじゃないかと思いました。 このような場合、NotNull制約は何の為についているんでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (4)
- dee_honda
- ベストアンサー率53% (26/49)
- nihon_no_samurai
- ベストアンサー率20% (5/24)
- entree
- ベストアンサー率55% (405/735)
- nihon_no_samurai
- ベストアンサー率20% (5/24)
関連するQ&A
- NOT NULL制約がついた項目のUPDATEについて
基本的な事で申し訳ありません。 Oracle10g を使用していますが、 SQLのUPDATE文で主キーではない、 NOT NULL 制約がついたVARCHAR2(30)の項目を ''(ブランク)で更新しようとした所エラーが返されました。(ORA-01407) NULLで更新するのではないから大丈夫かと思っていたんですが、 NOT NULL 制約がついているとブランクでも更新ができないのでしょうか?
- ベストアンサー
- Oracle
- 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制約は列レベルでのみ定義出来る という制約はなぜですか? 表レベルだと何か不都合があるのでしょうか?
- 締切済み
- Oracle
- 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型で使用するのは不可能なのでしょうか? ご返答をよろしくお願いします。
- 締切済み
- MySQL
- 主キーの位置
こんにちわ。 MDBでテーブル設計するときに, 主キーとなる項目は,テーブルのどの位置に定義しても 影響はないのでしょうか? やはり先頭が一般的かと思われますが, 最後尾に定義すると何か不都合などあるでしょうか? なおORACLEではどうでしょうか? 教えてください。お願いします。
- ベストアンサー
- その他(データベース)
- テーブルのどの項目が主キーか判断する方法
SQLで、 desc table1 と入力するとテーブルの項目名、NOT NULLの有無、型を表示させることができますが、 同じような表示形式で主キーかどうかを確認することはできますか? ご存知の人がいましたら教えてください。
- 締切済み
- SQL Server
- プライマリキー(主キー)を貼る際の注意は
初歩的な事を聞かせて下さい。 テーブルを作成しました。 テーブルの項目は以下の通りです。 連番 コード 名前 カタカナ パスワード メールアドレス 所属 権限 削除フラグ 作成者 作成日 更新者 更新日 プライマリキー(主キー)を貼る際の注意は有りますでしょうか。 私自身、プライマリキーはユニーク項目に貼るという認識していますが間違っていますでしょうか。 また、一つのテーブルにプライマリキーって貼る事はできますかっていうか貼る事ができるんでしょうか。 くだらない質問をしている事は重々、承知していますが自身がありません。 申し訳ありませんがアドバイスいただけませんでしょうか。 皆さん、ご教授宜しくお願いします。
- ベストアンサー
- PostgreSQL
- 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を修正すれば良いでしょうか?
- ベストアンサー
- Oracle
- 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接続は 出来ないでしょうか?
- ベストアンサー
- その他(データベース)
お礼
DB管理者にDB変更依頼を提出し、 無事NotNull制約を外す事ができました。 正規化してくれないのは 汎用機出身の方だからでしょうか? でも無事解決できてなによりです。 みなさまのアドバイスのおかげで助かりました。 ありがとうございました。