Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何设计此链接表?_Sql_Database - Fatal编程技术网

Sql 如何设计此链接表?

Sql 如何设计此链接表?,sql,database,Sql,Database,好的,我有一个用户表,希望一起定义用户组。我的最佳解决方案是创建三个数据库表,如下所示: 用户表 user_id user_name 用户组链接 group_id member_id 群组信息 group_id group_name 此方法将成员和组信息分开。这正是我的想法。有更好的方法吗?另外,对于链接其他两个表的表,什么是好的命名约定?在我看来,这是一个相当标准的基于角色的用户模型。这很好。在我看来,这是一个相当标准的基于角色的用户模型。这很好。看起来不错,我同意: Group ---

好的,我有一个用户表,希望一起定义用户组。我的最佳解决方案是创建三个数据库表,如下所示:

用户表

user_id
user_name
用户组链接

group_id
member_id
群组信息

group_id
group_name

此方法将成员和组信息分开。这正是我的想法。有更好的方法吗?另外,对于链接其他两个表的表,什么是好的命名约定?

在我看来,这是一个相当标准的基于角色的用户模型。这很好。

在我看来,这是一个相当标准的基于角色的用户模型。这很好。

看起来不错,我同意:

Group
-----
GroupID (PK)
Name
CreatedDate

GroupUser
---------
GroupUserID (PK)
GroupID (FK)
UserID (FK)
CreatedDate

User
----
UserID (PK)
Firstname
Lastname
CreatedDate
...

看起来,很好,我会选择:

Group
-----
GroupID (PK)
Name
CreatedDate

GroupUser
---------
GroupUserID (PK)
GroupID (FK)
UserID (FK)
CreatedDate

User
----
UserID (PK)
Firstname
Lastname
CreatedDate
...
视情况而定

如果一个成员只能属于一个组,那么您的解决方案是过度的(并且没有适当地优化)。在这种情况下,去掉
UserGroupLink
表就足够了,只需在
UserTable
中添加一个
group\u id
列即可


如果一个成员只能属于一个组,那么您的解决方案是过度的(并且没有适当地优化)。在这种情况下,去掉
UserGroupLink
表就足够了,只需在
UserTable
中添加一个
group\u id
列,重要的是选择一个约定并坚持它

以下是我如何命名这些表(顺便说一句,结构很好):


重要的是选择一个惯例并坚持下去

以下是我如何命名这些表(顺便说一句,结构很好):


你的桌子布局很合适,先生。联接表有各种命名约定——RubyonRails使用两个表名,并按字母顺序用下划线联接:“group_member”(组成员)。IMHO,您的表布局是合适的。联接表有各种命名约定-Ruby on Rails使用两个表名,并按字母顺序用下划线联接:“group_member”(组成员)。除了答案之外,创建表的决定不依赖于个人意见。我们称之为数据库规范化;数据库设计中要遵循的规则。

除了答案之外,创建表的决策不依赖于个人意见。我们称之为数据库规范化;数据库设计中要遵循的规则。

每个用户都可以是多个组的成员。我应该在OP(我的错误)中指定每个用户都可以是多个组的成员。我应该在OP(我的错误)@Soo,FK=foreign key中指定另一个表中的键。GroupId+UserId不是链接表中可以接受的PK吗?@Jacob,是的。与复合键相比,我更喜欢单个代理键;这是一个选择问题。@Soo,FK=外键,来自另一个表的键。GroupId+UserId在链接表中不是可以接受的PK吗?@Jacob,是的。与复合键相比,我更喜欢单个代理键;这是一个选择的问题。这里缺少信息。一个用户可以属于多个组吗?属于某个组是可选的还是必需的?您提出的解决方案还可以,但如果用户必须只有一个组,则可以进一步缩减。此外,调用它的成员id与调用用户的实体不一致。此处缺少信息。一个用户可以属于多个组吗?属于某个组是可选的还是必需的?您提出的解决方案还可以,但如果用户必须只有一个组,则可以进一步缩减。此外,调用它的成员id与调用用户的实体不一致。