0

テーブルは、ユーザーがさまざまな場所にアクセスするためのものです

以下のようなデザイン:

ユーザーテーブル:

<user>
userid
username
place          (the row define access rights)

テーブルを配置します。

<place>
placeid
placename
floor

私の考え:

3つの場所とplaceidは001,002,0031人のユーザーであり、useridは001であり、これらの3つの場所にアクセスします。

<user>
userid     username       place
001        john           001,002,003


<place>
placeid    placename   floor
001        A           1 
002        B           2 
003        C           3
004        D           4 

私の質問は、

「user」テーブルでは、属性「place」に多くのプレースIDが含まれており、コンマで区切られています。このデザインは問題ありませんか?場所の値を「ユーザー」テーブルから分離する必要がありますか?

4

3 に答える 3

2

それは良い考えではありません。リレーションシップを格納する別のテーブルを作成します。

<users-places>
userid  placeid
1       1
1       2
1       3

アプローチのインデックス作成は簡単ではありませんが、可能ではあります。

関連する 2 つのテーブルを意味するため、「users-places」という名前を使用します。この関係に関するより多くの情報を保存する場合 (つまり、この新しいテーブルに列を追加し始める場合) は、名前を変更してください。

また、複数形でテーブルに名前を付けます。Singular はクラス名用に予約されています。テーブルはコレクションと見なされます。

于 2012-10-29T04:08:18.633 に答える
2

コンマ区切りのリストを使用して多対多の関係を作成するのは、設計が不適切です。代わりに中間テーブルを使用する必要があります。

<user>
userid
username

<place>
placeid
placename
floor

<accessrights>
userid
placeid

userid 001 の user.place に "1,2,3" を配置する代わりに、アクセス権に 3 つの行を配置します。すべての行には userid 001 があり、1 つの行には各 placeid があります。

于 2012-10-29T04:09:17.283 に答える
0

皆さん、ありがとうございました、

以下のようにデザインを変更しましたが、よろしいですか?

<user>
userid     username       groupid
1          john           1


<group>
groupid      groupname
1           admin
2           general
3           special 



<group_manage>
groupno    groupid      placeid
1          1            1
2          1            2
3          1            3
4          1            4  
5          2            1
6          2            2
7          2            3

<place>
placeid    placename   floor
1          A           1 
2          B           2 
3          C           3
4          D           4 
于 2012-10-29T04:42:15.923 に答える