0

Visio 2010 でデータベース モルデ ダイアグラムを作成し、そのダイアグラムをスキーマとしてフォワード エンジニアリングしようとしています。

次の警告を修正することに行き詰まっています。

 warning : 'User_Screen_SCREENS_FK1' : Relationship has cardinality other than either zero-or-one or exactly-one, yet the child columns form a key.

問題の 2 つのテーブルは次のとおりです。

ここに画像の説明を入力

テーブルは、このScreensアプリケーションで使用可能なすべての「画面」を保存する場所でありUser_Screens、ユーザーがアクセスできる画面を制御するために使用されます。(関係がある別Usersのテーブルがあります)。1 to 0 or moreUser_Screen

問題がどこにあり、どのように修正すればよいかわかりません。誰かが私が間違っている場所を教えてくれますか?

アップデート:

リレーションシップを変更し、関連するすべてのテーブルを含めて、下の画像の問題をよりよく示しています。

ここに画像の説明を入力

私が持っているエラー:

 error : 'User_Screen_SCREENS_FK1' : Child column(s) not specified.

取り除けない警告:

warning : 'POSITION_USERS_FK1' : Relationship has a cardinality of either zero-or-one or exactly-one, yet the child columns form part of a key.

 warning : 'User_Screen_SCREENS_FK1' : Child columns overlap with child columns of USERS_SCREENS_FK1.

 warning : 'USERS_SCREENS_FK1' : Relationship has cardinality other than either zero-or-one or exactly-one, yet the child columns form a key.
 
4

1 に答える 1

0

各テーブルの PK を各テーブルの FK として追加しようとしているため、混乱していると思います。各テーブルに 1 つの PK、基本的な自動番号 INT を与えて、複数列の主キーを削除してみてください。

画面: PK: ScreenID INT | FK: ポジション ID

位置: PK: PositionID INT | 位置名 VARCHAR

User_Screens : PK: UserScreenID INT | 外部キー: ユーザー ID | FK: スクリーン ID

これにより、画面レベルの情報とユーザーレベルの情報が分割されます。たとえば、両方のテーブルに positionID は必要ありません (意味がわかれば)、それは単に画面に属します。ジョインから位置情報を取得できます。これにより、特定のユーザーのすべての画面位置が得られます。

SELECT [PositionName] FROM UserScreens t1 JOIN Screens t2 ON t1.ScreenID = t2.ScreenID JOIN Positions t3 ON t2.PositionID = t3.PositionID WHERE t1.UserID = 12345

更新: 不要な外部キーを定義しすぎています。たとえば、UserScreens テーブルはそれらの間のリンクになるため、Screens テーブルは UserPK の FK を必要としません。非 PK および非 FK フィールドの無視:

[Users]: UserPK
[Screens]: ScreenPK, PositionPK_FK
[UserScreen]: UserScreenPK, UserPK_FK, ScreenPK_FK

ユーザー間で位置が変わる可能性がある場合は、PositionPK_FK を [UserScreen] に移動します。

于 2012-04-18T01:01:38.380 に答える