11

定義によると、ジャンクション テーブル(ブリッジ テーブル/リンク テーブル) は、次のように使用すると、多対多の関係に使用されます。

CREATE TABLE Users
(
UserLogin varchar(50) PRIMARY KEY,
UserPassword varchar(50) NOT NULL,
UserName varchar(50) NOT NULL
)


CREATE TABLE Permissions
(
PermissionKey varchar(50) PRIMARY KEY,
PermissionDescription varchar(500) NOT NULL
)


--This is the junction table.
CREATE TABLE UserPermissions
(
UserLogin varchar(50) REFERENCES Users (UserLogin),
PermissionKey varchar(50) REFERENCES Permissions (PermissionKey),
PRIMARY KEY (UserLogin, PermissionKey)
)

しかし、1 人のユーザーが多くの注文に関連付けられているこの例のように、1 対多の関係にも同じように簡単に使用できませんでした:

(私はデータベースについてよく理解していないので、誤解があれば訂正してください。)

CREATE TABLE Users
(
UserLogin varchar(50) PRIMARY KEY,
UserPassword varchar(50) NOT NULL,
UserName varchar(50) NOT NULL
)


CREATE TABLE Orders
(
OrderKey varchar(50) PRIMARY KEY,
OrderDescription varchar(500) NOT NULL
)


--This is the junction table.
CREATE TABLE UserOrders
(
UserLogin varchar(50) REFERENCES Users (UserLogin),
OrderKey varchar(50) REFERENCES Orders (OrderKey),
PRIMARY KEY (UserLogin, OrderKey)
)
4

6 に答える 6

10

1 対多の関係にジャンクション テーブルを使用できない理由はありません。問題は通常、パフォーマンスの 1 つです。不要な場合に、データベースを追加のテーブルに結合するのはなぜですか?

于 2009-05-09T18:15:07.437 に答える
8

はい、ジャンクション テーブルに 1 対多の関係を格納して適用することは引き続き可能です。

あなたの例では、UserOrdersジャンクション テーブルに制約を適用していないため、1 つの注文が 2 人のユーザーに属する可能性があります (これは正しくないと仮定します)。OrderKeyジャンクション テーブルの主キーにするUserOrders(またはその列に一意の制約を設定する)ことができるようにするため。技術的には、 との間は多対 1 の関係になり、 と の間UserOrdersUsers1対 1 の関係にOrdersなりUserOrdersます。

ジャンクション テーブルを使用して多対 1 のリレーションシップを設計する理由は 1 つしか考えられません。将来的に多対多のリレーションシップを許可する予定で、データの移行に対処したくない場合です。ただし、それまでの間、追加のテーブルを保存して結合するためのコストを支払うことになります。

于 2009-05-09T18:16:34.000 に答える
5

これは多対多になります。

CREATE TABLE UserOrders
(UserLogin varchar(50) REFERENCES Users (UserLogin),
OrderKey varchar(50) REFERENCES Orders (OrderKey),
PRIMARY KEY (UserLogin, OrderKey));

これは 1 対多になります (1 人のユーザーが多くの注文を持っています)。

CREATE TABLE UserOrders
(UserLogin varchar(50) REFERENCES Users (UserLogin),
OrderKey varchar(50) REFERENCES Orders (OrderKey),
PRIMARY KEY (OrderKey));

PRIMARY KEY 制約の違いに注意してください。

于 2014-01-28T06:22:28.253 に答える
3

テーブルを作成すると、実際には「ジャンクション」テーブル、「連想」テーブル、「結合」テーブルのタイプはありません。それは単なるテーブルです。

これらの用語を使用して、エンティティ (および結果のテーブル) が最初に作成された特定の理由を説明します。連想エンティティは、多対多の状況を解決するために最初に作成されます。しかし、これらのテーブルには独自の属性 (関連付けの時間、関連付けの理由など) が含まれていることがよくあります。したがって、SQL Server、Oracle、またはコードには、テーブルが作成された理由を知る理由はありません...それがテーブルであることだけです。

技術的な観点からは、連想テーブルと他のテーブルの間に違いはありません。

したがって、これらのテーブルは、他のテーブルが果たすことができるあらゆる役割を果たすことができます。他のテーブルをそれらに関連付ける方法についての規則はありません。

于 2009-05-09T19:37:11.717 に答える
0

結合/ジャンクション テーブルに「1 つの」制約を適用して、"多くの」側。これは、多側の rwos に関係が 1 つだけあり、関係が結合/ジャンクション テーブルに記述されているためです。

于 2014-05-30T12:06:01.833 に答える
0

概念が間違っていると思います-これが役立つ場合の簡単な説明です: 2つのテーブル(たとえば、AとB)の間で多対多の関係を実現するには、ジャンクションテーブル(たとえば、テーブル)の助けを借りる必要がありますc) テーブル A と B の両方と 1 対多の関係になります。

于 2014-10-23T14:53:11.597 に答える