• ベストアンサー

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

entreeの回答

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.5

> もうちょっと正規化して、別テーブルにしてもらえませんか?とお願いもしましたが、 > もう決まっているから駄目と言われました。 > それで一体どうすればいいのかわからなくなって、 > 全項目NotNullを外せばいいんじゃないか?と思って質問してしまいました。 > > こういう場合、どういう対処が望ましいのでしょうか? 正規化できるのであれば正規化するに越したことはないですが、できないのであれば仕方がないでしょう。 NOT NULL 制約の有無はソート列として指定された列以外ではあまり影響を与えることはありません。ましてや、WHERE 句の条件にもならないような列ではなおさらのことです。 ただ、NOT NULL 制約を好き勝手に外す権利があるのであれば、好き勝手に正規化する権利が jack_s さんにあるような気がしなくもないですが・・・。

noname#53515
質問者

お礼

DB管理者にDB変更依頼を提出し、 無事NotNull制約を外す事ができました。 正規化してくれないのは 汎用機出身の方だからでしょうか? でも無事解決できてなによりです。 みなさまのアドバイスのおかげで助かりました。 ありがとうございました。

関連する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接続は  出来ないでしょうか?