2011-11-21 15 views
0

私はIDの主キーを持っている場所テーブルを持っています。外部キーと1対1の関係はどちらにする必要があります

私はLID(location id)という列を含むlocations_lonlatテーブルも持っています。

これは、これらの2つのテーブルが現在どのように関連付けられているかを示します。

テーブルの1つに外部キーを作成したいのですが、現在の方法(最も簡単なアプローチ)に固執する場合は、locations_lonlat.LIDからlocations.idを指す外部キーを作成する必要があります。

私はこれを行うことを試みたとき、私はエラー

「FOREIGN KEY制約と競合ALTER TABLE文」私はlocation.idが主であるためであると推測

を取得キー、私はおそらく周りを回ることができますが、この全体のアプローチはちょっと匂いがするように思われる。

ロケーションテーブルにlocationLonLatIdを持たない方がよいでしょうか。

彼らはとにかく1-1の関係を持っているので、おそらくそれは関係ありませんか?

どのようなアプローチが最適でしょうか?

+2

ロケーションテーブルがある場合は、このテーブルの一部としてlat/longを使用するだけでは意味がありませんか?あなたはテーブルを分割することから何のメリットがありますか?あなたは1-1の関係を使用することを参照しても、このデータを分割する理由はありますか? – jimplode

+1

現在のテーブルの定義を提供できますか? –

+0

こちらをご覧ください:http://stackoverflow.com/questions/1722741/defining-a-one-to-one-relationship-in-sql-server/ –

答えて

2

1-1の関係は(1がある場合)、外部キーが非manditory側に宣言されている

CREATE TABLE tbl1 (id ... PRIMARY KEY (id)) 
CREATE TABLE tbl2 (id ... PRIMARY KEY (id), 
    FOREIGN KEY fk_tbl2_tbl1 REFERENCES tbl1(id)) 

のように見えます。 1-1二重非義務者は、外部キーが主キーよりも別の列であることを要求します。

+0

1-1の関係は定義_両側で必須です。一方の側が非執行者であれば、それは1-0であろう。1の関係(「1から0または1」)。 – onedaywhen

+0

1-1の関係は、データベースのバルクロード順序を保持するために、片側または両側で技術的に必須ではありません。 – Joshua

+0

次に、1対1の定義は緩やかなものです。厳密に言えば、それは1-0.1の関係です。また、技術的な要件は、SQLの欠陥(複数の割り当てをサポートしていない)と、SQL Serverの欠落している機能(遅延可能な制約をサポートしていない)によるものだと考えてください。 – onedaywhen

-1

でも1:1の関係、独立して存在一つである校長や依存、主要なエンティティは、両方が独立して存在することができない場合、彼らは同じテーブルに属しているので、あなたは、いくつかの正規化の問題を持って、常にあります。私はあなたが持っているものだと思うのテーブルがプリンシパルのプライマリキーが自動インクリメント1で主キーを共有する場所

1に真の1であり、の依存鍵は、プリンシパル

を参照する外部キーを持っていることは、1:M locationにはlonglat(データベースごとに)が多くありますが、locations_lonlat.LIDを一意にすることができます。あなたは私が思うにエラーを取得している

理由はlocations_lonlat.LIDがテーブルをlocation.idに対応いけないいくつかの値を持っている既存のデータがあるということです。

+0

1-1、二重義務、2つのテーブルが発生します。理由の1つとして、SQL Serverの行制限を参照してください。 – Joshua

+0

それは第3正規形に違反しないでしょうか?あなたはSQL Serverがそれを必要とする理由のリンクまたは例を挙げることができますか? –

+0

http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/sql-2000-when-8000-characters-is-not-eno – Joshua

関連する問題