• ベストアンサー

自動採番について

お世話になります。 データベースのシーケンスによるシリアル型について質問があります。 例えば下記のような商品テーブルがあるとします。 ・商品コード ・商品名 ・価格 ・備考 ※商品コードは重複しない値(一意)を格納。 このようなマスタを作成する際にシーケンスによるシリアル型による自動採番のフィールドを指定した方がいいのでしょうか。またシーケンスによるシリアル型をどのような場合に使うのが一般的なのでしょうか。 大変、お手数をお掛けしますが説明していただけませんでしょうか。 くだらない質問ですみませんが宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5059/13223)
回答No.2

例示されている商品テーブルの場合、商品コードが一意な値と言う事なのでシリアル型のカラムは不要でしょう。 一般的にシーケンスを使ったシリアル値は、1つのレコードを容易に特定する一意な情報が無い場合に使用します。 集合としてデータを抽出する場合はいいですが、1つのレコードを特定する一意な情報が無いと特定のレコードを更新したり削除したりと言った操作が煩雑になってしまいます。 例えば、顧客からの注文情報を扱う場合、注文データテーブルには注文1件毎の注文番号や顧客情報、注文日等の情報を記録し、注文明細テーブルに注文データテーブルのキーと商品コード、注文数、販売単価等を記録すると思います。 注文データテーブルでは注文番号をシリアル型にすると、人が採番する事なく自動的にユニーク値を割り当てられて重複した値を割り当てると言ったミスを無くせますし、注文明細テーブルだと明細一件毎にレコードを特定するキーが作れて、明細の内容を修正したい時などはDB操作がしやすくなり、誤ったデータ修正が発生しなくなります。

nanchatte_se
質問者

お礼

コメントありがとうございます。 なるほど。説明ありがとうございました。 では、失礼します。

その他の回答 (2)

  • tknkk7
  • ベストアンサー率11% (378/3311)
回答No.3

Microsoft Access & Data Bace

nanchatte_se
質問者

お礼

???

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.1

例えば、登録してある商品在庫を出すとき、日付も商品コードも同じものがあって 別にどちらから出してもいいのだけど、画面のプログラム上どちらかを先に表示し、 もう一方は次の画面とした時、次画面をどこから表示したらよいかでプログラム できないのですよ。何は一意に決まっているコードがあればいいのになぁ、と いう時くらいですね。

nanchatte_se
質問者

お礼

コメントありがとうございます。

関連するQ&A

  • マスタの更新について

    お世話になります。 マスタを登録・更新するプログラムを作成しています。 入力画面には以下の項目を配置しています。  ・商品コード  ・商品名  ・備考 値を格納するデータベースのテーブルのフィールドは以下の通りです。  ・商品コード  ・商品名  ・備考  ・削除フラグ  ・登録日  ・登録者  ・更新日  ・更新者 ※主キーは商品コードです。 別画面でこのマスタ内容を選択してデータを作成しています。その為、現在は整合性を取るために、マスタを更新する時は商品コードを変更できないようにして更新しています。 ここで皆さんに質問があります。 現在のテーブルにはオートナンバー型のようなフィールドを作成していません。 一般的にこのようなマスタを作成する際はオートナンバー型のようなフィールドを作成するものなのでしょうか。またどのように対応するのが望ましいのでしょうか。 くだらない内容で大変申し訳ありませんが宜しくお願いします。 私の説明で皆さんに伝える事ができたか心配ですがどうぞ、アドバイス等をいただけませんでしょうか。 何卒、宜しくお願いします。

  • SQL Server INSERTのトリガで採番

    データINSERT時にトリガを使い主キーを 採番したいのですが、少々コーディングに 困っていてます。 わかる方どうぞ、助言をお願いします。 主キー yyyymm+n(5) 採番したまではよかったのですが、 INSTEADテーブル(トリガのバッファテーブル?)の 主キーのフィールドに 格納する方法がわかりません。 どうもORACLEと記述方法がまるで違うので かなり苦戦しています。 テーブルが確定してるので現状の フィールドレイアウトやデータ体系を変更することは できません。よろしくお願いします。

  • Microsoft Accessで自動採番をさせたい。

    いつも大変お世話になっております。 アクセスでの質問です。 フィールドに「管理ID」があって、ここに8ケタのコードが自動採番されるようなしくみにしたいと考えています。 この管理IDは8ケタで、採番の仕組みは以下の通りです。 (1)「アイテム分類」というフィールドに入った製品によって頭2桁が決まる。 例)野菜・・・YA   果物・・・KU   鮮魚・・・SE (2)入力しているのが06年07月だったら次の4桁は「0607」になる。 ここまでで、頭の6ケタ「YA0607」などまでが決まる。 最後の2桁は、その月に発生している情報の連番をつけていきたい。 例) 06年07月に1番目に採番されたデータ→YA060701 06年07月に5番目に採番されたデータ→YA060705 という具合に・・・ これにはたくさんの要素がつまっています。 要素(1) 採番するフィールド以外のフィールド(アイテム分類)を見て、頭2文字を決めること。(ただし、規則はありますので、DBで表すことはできます) 要素(2) 現在のDATEから、年と月だけ4桁拾うこと 要素(3) 過去に発生しているレコードを抽出・カウントし、最後の数字の+1になる番号をつける ということです。 上記のようなことが可能なのでしょうか? 分かりましたら、できるだけ具体的に教えてください。よろしくお願いします。m(_ _)m

  • サブフォームで自動採番

    お世話になります。ACCESS2000で制作しています 主テーブル(マスタ)に顧客コード(主キー)、 サブテーブル(トラン)に顧客コードと枝番 というフィールドがあります。 顧客コードでリレーションシップを結んでいます。 それぞれのテーブルからクエリを経てフォームをつくり (Q_マスタ→F_マスタ、Q_トラン→F_トラン) また、検索フォームも別に作っています。 F_トランはF_マスタに埋め込んでいます。 検索フォームで検索して該当するデータが無い場合 DoCmd.OpenForm "F_マスタ", , , , acFormAdd で新規フォームを呼び出します。 このときサブフォームの枝番に自動的に「1」を入れたいのですが (開く時でも読み込み時でもいつでもいいのですが) どうしたら良いのでしょうか? ちなみに今は サブフォームのプロシージャで Private Sub Form_Open(Cancel As Integer)  If Me.NewRecord Then   Me![枝番] = 1  Else   Me![枝番] = DMax("枝番", "Q_トラン") + 1  End If End Sub としています。 こうするとQ_マスタの一番上のデータが 例えばQ_トランレコードを2つ持っていると 「3」と出てしまいます。 どのようにすればいいのでしょうか。 よろしくお願いします。

  • Access 文字+年ごとの自動採番

    Accessは全くの初心者です。 プログラマーさんのサイトや質問サイトを参考に、初めてデータベースを作っているのですが、 どうしても文字+年ごとの自動採番がうまくいきません。 挿入前処理で「営250001」のように漢字1文字+和暦2桁+4桁連番にして、 年が変わるごとに4桁連番を0001に戻したいのです。 今入力してあるコードは以下の通りです。 ----------------------------------------------------------------------------- Private Sub Form_BeforeInsert(Cancel As Integer)  Dim vDt As Variant  vDt = DMax("番号", "営テーブル", "番号 Like '" & Format(Date, "ee") & "*'")  If (IsNull(vDt)) Then   番号 = "営" & Format(Date, "ee") & "0001"  Else   番号 = "営" & Left(vDt, 2) & Format(Val(Right(vDt, 4)) + 1, "0000")  End If End Sub ----------------------------------------------------------------------------- この状態では、0001のまま採番が進まず、行き詰ってしまいました。 他の質問者さんが(Date,"ee")を(Now,"nn")に置き換えて、分ごとの採番を試していたのを参考に、 「"営"&」を取って、採番が進むところまでは確認できました。 使っているのはAccess2003です。 どうか、よろしくお願いします。

  • ファイルメーカーの繰り返しフィールドで

    いつもありがとうございます。 初心者ながら、ただいま在庫計算のデータベースを作っています。 ファイルメーカー8の繰り返しフィールドに関してですが、 商品コード 1.2.3... 在庫数   1.2.3... という二つの繰り返しフィールドがあるのですが、 商品コード「3」に対して、それに対応した在庫数「3」を返す 関数またはスクリプトの作り方を教えてください。 なお商品コードと在庫数は、マスタテーブルのレコードで関連づけられています。 質問がわかりにくいかもしれませんが、 何卒よろしくお願いします。

  • Accessで日付が変わると番号がリセットされる自動採番がしたい

    Microsoft Accessで下記のようなデータベースを作っています。 テーブル名:TB_受付 テーブルデザイン 受付番号:テキスト型 受付日:日付/時刻型(yyyy/mm/dd) 番号:数値型 コース種類:テキスト型 備考:テキスト型 テーブルイメージ 受付番号    受付日    番号  コース種類  備考 ------------------------------------------------------------ 20051201受付1   2005/12/01   1 20051201受付2   2005/12/01    2 20051201受付3   2005/12/01    3 ・     ・ ・                   ・ 20051202受付1    2005/12/02 というように、受付日が変わると番号が1に戻るような採番をしたいのです。 上記テーブルを元に作成したフォームで、 受付日にはDate関数でその日の日付が入るようにしています。 フォームの更新前処理に下記のコードをいれています。 Private Sub Form_BeforeInsert(Cancel As Integer) If DCount("番号", "TB_受付") = 0 Then Me![番号] = "1" Else Me![番号] = Format(DMax("番号", "TB_受付") + 1) End If End Sub さらにコース種類の更新後処理に Me![受付番号]=Format("受付日,"TB_受付")&"受付"&Format("番号","TB_受付") というコードを書いて日付&番号が、[受付番号]のところに表示されるようにいろいろやっているのですが、日付が変わると番号をリセットさせることがなかなかできません。 VBAはあまり理解できている方ではないのですが、いろいろ検索をしたり調べたりしてたどり着いたのが上記です。 日付でリセットされる採番をするにはあと何をすればよいか、もしくは根本からこうしたほうがいいというのがあれば、とも思うのですが 詳しい方に教えていただけないでしょうか?

  • ACCESS+SQL Serverで主キーを自動採番する

    ACCESS+SQL Serverで主キーを自動採番する ACCESSを独学で勉強を開始しているものです。 顧客管理のようなものを作りたいと思っているのですが、 オートナンバーではない主キー(顧客コード)を設定しているテーブルがあります。 顧客コードの構成はアルファベット1文字+数字8桁です。 そのうち、数字は西暦2桁+月2桁+日2桁+下2桁は連番です。 ACCESS2007プロジェクトで、SQL Server 2005 Express Editionへ接続しテーブルは作ってあり、既に顧客データが10件ほど入っています。 新規に顧客データを追加する際に、必要事項を入力し、登録ボタンを押した段階で顧客コードを自動生成し、重複チェックし、採番したいと考えています。 アルファベットは必要事項入力時に入力済み、日付もその日の日付を6桁設定し、とりあえず「01」と下2桁を採番して、現在のデータに同じものがないかチェックします。 そして、同じものがあれば「01」+1を繰り返しながらチェックしていくというようなコードはどのようにすればいいでしょうか? わかりづらいとは思いますが、よろしくお願いします。

  • Accessで商品分類毎に自動採番を行う方法

    access初心者です。過去ログも内容に合致するものがなかなか見つからなかったので、質問させていただきます。 現在商品テーブルを作成しています。 例えば下記のように商品カテゴリが分類されていて、小分類毎に商品を0001から自動で採番する方法をご教示いただけないでしょうか? 大分類  中分類    小分類     商品名   01家電  01映像家電 01テレビ     LCD-32 0001 LCD40 0002 | できればフォーム機能を使用してコンボボックスで大分類、中分類、小分類と選択していき、最後に商品を登録した結果としてLCD-32の商品コードは0101010001となるようにしたいのです。 どうぞ宜しくお願いします。

  • 細かく商品を管理できるテーブルとは

    商品情報を格納しているテーブルがあります。 現在の商品マスタのフィールド構成は以下の通りです。 ・商品コード ・商品名 ・カテゴリ ・備考 ・削除フラグ ・作成日 ・作成者 ・更新日 ・更新者 ※カテゴリは商品毎をまとめる為に付けています。  例えば「衣服」とか「小物」などです。 今までは1社のみの商品を管理をしていましたがもう1社増える事になったので新しく商品テーブルを作成する事になり、どうか皆さんのお知恵を借りたいと思い投稿しました。。 これからは1社のみで扱っている商品や共通(2社)で扱っている商品など、さまざまです。 なので細かく商品を管理できるようなテーブルを作成したいと思っています。 些細な事でも何でも構いませんのでアドバイスいただけたら嬉しいです。 宜しくお願いします。