如何设计表访问不同的地方

时间:2012-10-29 04:02:32

标签: mysql sql sql-server database database-design

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

设计如下:

用户表:

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

地方表:

<place>
placeid
placename
floor

我的想法:

三个地方和placeid是001,002,003 一个用户和用户ID是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”包含许多placeid, 并用逗号分隔,这个设计好还是坏? 它需要将位置值与“用户”表分开吗?

3 个答案:

答案 0 :(得分:2)

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

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

索引你的方法并不是直截了当 - 尽管可能。

使用名称“users-places”,因为它表示它涉及的2个表。如果您显着存储有关此关系的更多信息,则更改名称 - 即,您开始向此新表添加列。

另外,以复数形式命名表格。 Singular保留给类名。表被认为是集合。

答案 1 :(得分:2)

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

<user>
userid
username

<place>
placeid
placename
floor

<accessrights>
userid
placeid

而不是在用户ID 001的user.place中放置“1,2,3”,然后在访问权限中放置三行,所有行都使用userid 001,每行使用一个placeid。

答案 2 :(得分: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