Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Database design 数据库设计。如何设计一个表与同一个字典表有10个关系_Database Design - Fatal编程技术网

Database design 数据库设计。如何设计一个表与同一个字典表有10个关系

Database design 数据库设计。如何设计一个表与同一个字典表有10个关系,database-design,Database Design,我有一个关于数据库设计的问题。 例如,我有一个名为“User”的字典表, 并有另一个名为“OperationInfo”的数据表,该数据表有多列引用到“User”, 像 如果我想获得所有用户名,我必须多次加入, 像 多次仅为获取名称而加入,这是不好的,因为此数据表具有十多个带有用户表的外键。 我有一个解决方案是在数据表中存储用户名, 像 然后查询所有用户名,如 SELECT A.CreateUserName ,A.UpdateUserName ,A.RemoveUse

我有一个关于数据库设计的问题。
例如,我有一个名为“User”的字典表, 并有另一个名为“OperationInfo”的数据表,该数据表有多列引用到“User”, 像

如果我想获得所有用户名,我必须多次加入, 像

多次仅为获取名称而加入,这是不好的,因为此数据表具有十多个带有用户表的外键。 我有一个解决方案是在数据表中存储用户名, 像

然后查询所有用户名,如

 SELECT A.CreateUserName
       ,A.UpdateUserName
       ,A.RemoveUserName
       ,A.DeleteUserName
       ,... 
   FROM OperationInfo A 
   <Condition>
选择一个.CreateUserName
,A.UpdateUserName
,A.RemoveUserName
,A.DeleteUserName
,... 
从操作信息A
查询变得简单多了。但这并不好,数据冗余,会导致字典表和数据表的名称不一致。 有更好的设计吗?因为有很多冗余列。
我该怎么办?非常感谢。

您回答了自己的问题


在中使用多个连接客观上更好,因为以另一种方式使用可能会导致数据过时,例如,如果用户名更改或该用户被删除。。。如果出于某种原因您不关心这个问题,那么继续使用非规范化方法。

实际上,您应该进行更多的规范化

您的用户表很好

User
----
User ID
User Name
您还应该创建一个操作表

Operation
---------
Operation ID
Operation Name
最后,创建一个UserOperation连接表,因为一个用户可以执行许多操作,而一个操作可以由许多用户执行

UserOperation
-------------
UserOperation ID
User ID
Operation ID
其中有唯一的索引(用户ID、操作ID)。您还可以在上具有唯一索引(操作ID、用户ID)


是的,UserOperation表将有许多行,在问题描述中每个用户最多有10行。但是这个标准化的解决方案可以扩展到每个用户20、50、100个不同的操作。

我不明白规范是什么。请详细说明规格,不要说你想要什么。“我应该做什么”来完成什么?说出什么使设计可以接受。使用足够的单词、句子和引用部分例子,清楚、完整地说出你的意思。此外,“更好”也没有任何意义,除非你定义了足够的细节,让每个人都同意估值。(换句话说,这没用。)通过编辑而不是评论来澄清@philipxy我想表达的是我的问题是我想查询所有用户名我有两种方法来解决多个引用的问题。第一种方法是存储主键并通过关联查找所有名称。第二种方法是使用冗余字段来存储用户名,这消除了使用相关查询的需要,但这将导致字典表和数据表的名称不一致。我不想知道哪个答案A或B更好。我想知道除了这两个,是否还有更好的设计。“通过编辑而不是评论来澄清。”PS Re clarity,这个问题与这篇文章是否合适没有多大关系,因为它只是不清楚。它不适合人类。同样在别处重新找到“答案”,问题是什么还不清楚。假设你给了某人这个职位。他们不能带着你知道能解决你问题的东西回来。帖子没有说你的问题是什么。什么是给定的,什么可以更改,什么不能更改,以及响应需要具有什么属性,比如一些应该具有什么属性的代码?您的评论不清楚。“使用足够的单词、句子和引用部分示例,以清楚、完整地表达您的意思。”我和您一样认为,我已经像这样重构了我的项目,非常感谢。
User
----
User ID
User Name
Operation
---------
Operation ID
Operation Name
UserOperation
-------------
UserOperation ID
User ID
Operation ID