0

这些表格供用户访问不同的地方

设计如下:

用户表:

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

放置表:

<place>
placeid
placename
floor

我的想法:

三个地方和placeid 是001,002,003 一个用户和userid 是001 来访问这三个地方

<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”包含很多placeids,用逗号隔开,这个设计好还是不好?它需要将位置值与“用户”表分开吗?

4

3 回答 3

2

这不是一个好主意。制作一个单独的表来存储关系:

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

为您的方法编制索引不会是直截了当的——尽管可能。

使用名称“users-places”,因为它暗示了它所关联的 2 个表。如果您大量存储有关此关系的更多信息,请更改名称 - 即,您开始向此新表添加列。

此外,以复数形式命名您的表格。单数保留用于类名。表被认为是集合。

于 2012-10-29T04:08:18.633 回答
2

使用逗号分隔的列表来建立多对多关系是糟糕的设计。您应该改用中间表:

<user>
userid
username

<place>
placeid
placename
floor

<accessrights>
userid
placeid

然后,不要在 user.place 中为 userid 001 放置“1,2,3”,而是在 accessrights 中放置三行,所有行都使用 userid 001,每个 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 回答