2009-07-16 21 views
2

多数のテーブルと強制的な関係を使用して在庫管理のデータベースを構築しようとしていますが、32-関係(インデックス) Accessテーブルを使用します(Access 2007を使用)。アクセス時に32テーブル関係の制限を回避する

問題は、従業員表に32の明示的な索引があるという問題ではありません。むしろ、問題は、FOREIGN KEY制約でEmployeeテーブルを参照できる回数の制限です。たとえば:

CREATE TABLE Employees (employee_number INTEGER NOT NULL UNIQUE) 
; 
CREATE TABLE Table01 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number)) 
; 
CREATE TABLE Table02 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number)) 
; 
CREATE TABLE Table03 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number)) 
; 

... 

CREATE TABLE Table30 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number)) 
; 
CREATE TABLE Table31 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number)) 
; 
CREATE TABLE Table32 (employee_number INTEGER NOT NULL REFERENCES Employees (employee_number)) 
; 

例外は、インデックスを作成できませんでした」、上記の最後の行にスローされます。あまりにも多くのインデックスが定義されて

私はこの制限を回避する必要がありますどのようなオプション

。?私は、1:1の関係を持つ重複するテーブルを作成することが1つの方法だと聞いたことがあります。私はデータベース設計には新しいので、間違っていれば私を修正してください。従業員と1対1の関係を持つ従業員2(1つのフィールドを含む)テーブルと、従業員IDが全員である残りの関係からこの新しいテーブルとの関係gnキー。 2番目のテーブルに最初のテーブルが表示されるようにするには、どうすればよいでしょうか?

別の方法がありますか?

利用可能な情報がないため、適切に設計されたデータベースではまれな問題である可能性があります。解決策は一般的な知識です。 noobを許して!

更新:即時コンセンサスは、私のデザインがボルケーであるか、あまりにも野心的であるということです。これは非常にうまくいくかもしれません。しかし、私は別の質問の中で、むしろ一般的な設計の議論を持っているので、議論のために、誰かがこれに答えることができますか?その答えが単に「それをしないでください」であれば、私はそれを受け入れなければなりません。

+2

あなたの全体的なデザインに問題があると思います。この特定の限度は、それ以外の場合は満たされません。 – Smandoli

+0

"全体的な設計に問題があります"が間違っています。私はいくつかのシステムでこの問題にぶつかりました。 –

+0

@トニー:ああ!その洞察に感謝します。しかし、私たちの照会者は、彼が "データベース設計の初心者"であると言います.... – Smandoli

答えて

-2

...私は1と表(1つのフィールドと?) Employees2を作成します。 からこの新しいテーブルに従業員と 関係へ1 関係 社員が外国である任意の残りの関係をキー。

これは実行可能です。おそらくあなたのメインテーブルは、主キーとしてAutonumberフィールドを持っているか、インデックス番号を生成しているかもしれません。あなたのEmployees2テーブルは明らかにそれをエコーする必要があります。

第二表は 最初に一緒に移入されますことを確認するための最良の方法は何ですか?

これは、レコードの追加方法によって多少異なります。しかし、一般的に、もちろん、あなたは完全性のためのルールに従わなければなりません。これは通常、正しい順序で表に追加し、関連レコードを別の場所に追加しようとする前に各レコードが保存されるようにします。

+0

偉大な、私の主な関心事は、この問題への私のアプローチが有効だったということです(間違っているかどうか)。従業員に新しいレコードを追加するためのフォームを設定し、対応するIDのコピーを2番目のテーブルに追加することができます。 – freestyletin

+0

良いそれがうまくいくと私は信じている。あなたが基本的なテーブルスキーム( "どうやってアプローチしますか?")に投稿し、細部を細かくしたいのであれば、あなたが得るものに非常に興味があります。 – Smandoli

1

従業員のテーブルには32のインデックスが必要だとは思えません。実際にSQL Expressに移行することを検討する必要があります。

+0

またはAccess以外のもの – rmeador

+0

私はocdecioに同意します.32の関係を必要とする従業員テーブルを持つことは奇妙に思えますが、あなたのreqはわかりません。+1 SQLServerに移行するために、私はSqlServerバックエンドにアクセスフロントエンドをリンクすることができると信じています(しかし、それを試みたことがない) –

+0

合意 - アクセスは私の最初の選択ではありません。しかし、私は今それに固執していると仮定?私はこのシステム内にある選択肢を理解して、十分に情報に基づいた移行を行うことができます。 – freestyletin

3

私のアプリでこの制限が何度も発生しました。そして私は他のポスターに、自分のアプリがうまく設計されていることを保証することができます。

Accessは、主索引プロパティ・ボックスでは表示できないが、DAOコレクションを介してアクセス可能なリレーションシップおよび参照フィールドによって索引を作成するという問題があります。これらの索引は、頻繁に作成した索引と重複した索引です。

私はあなたが重複したインデックスを削除することができるBE MDBにインポートするいくつかのフォームからなるツールを持っています。まだ私のウェブサイトでこれを利用可能にしていないので、私にメールしてください。

+0

隠されたインデックスと自動的に作成されたインデックスのために問題にぶつかりましたか?つまり、追加しようとしているインデックスだけでこれまでに遭遇したことがありますか? –

+0

David、あなたの質問を理解しているかわからないこの問題が発生するたびに、インデックスとインデックスの両方が作成されました。そこで、私が作成したインデックスを削除し、問題を回避しました。ある特定のアプリでは十分ではありませんでしたが。 –

+0

ANSI-92照会モードでSQL DLLを使用する利点の1つは、FOREIGN KEY宣言でNO INDEXキーワードを使用して、暗黙的な索引の作成を防止できることです。これで皆さんをSQL DDLの狂信者に変身させました。 ;) – onedaywhen

2

私はそれを回避するために1:1の関係を実装することにすべての関係/インデックスを定義しないことをお勧めします。どちらの解決法も最適ではありませんが、後では保守負担とデータ異常の可能性が非常に高くなります。

私は、他のいくつかのものと同じくらい速くデザインをデッキにするつもりはありませんが、私には興味があります。外部キーである従業員テーブルのフィールドを列挙できますか?いくつかの正規化が順調であり、SO上の賢い人々の中には、この問題を回避するための設計提案をする可能性があるという好奇心があります。

+0

私はこの制度にも同じ関心を持っています。私はまだ新鮮な投稿は適切だろうと思う – Smandoli

関連する問題