表格供用户访问不同的地方
设计如下:
用户表:
<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, 并用逗号分隔,这个设计好还是坏? 它需要将位置值与“用户”表分开吗?
答案 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