Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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
Mysql 规范化连接表中的列_Mysql_Sql_Database Design - Fatal编程技术网

Mysql 规范化连接表中的列

Mysql 规范化连接表中的列,mysql,sql,database-design,Mysql,Sql,Database Design,我有下面的设计deleted_by为三个连接表引用了相同的用户表。我是否应该进一步规范此模式,并将删除者、删除日期、删除原因(以及添加者和添加日期,我没有显示)放在单独的表中,如果是,如何操作 旁注。我在苦苦思索是否应该使用术语many-to-manytable,或者crosstable,或者jointable,或者其他什么。如果我应该使用不同的术语,请建议我可以编辑这篇文章或直接编辑它。谢谢编辑。根据RbaryYoung的评论,更改为“连接”表 多对多可以作为这种模式的描述。如果不了解系统的所

我有下面的设计
deleted_by
为三个连接表引用了相同的
用户
表。我是否应该进一步规范此模式,并将
删除者
删除日期
、删除原因(以及
添加者
添加日期
,我没有显示)放在单独的表中,如果是,如何操作

旁注。我在苦苦思索是否应该使用术语
many-to-many
table,或者
cross
table,或者
join
table,或者其他什么。如果我应该使用不同的术语,请建议我可以编辑这篇文章或直接编辑它。谢谢编辑。根据RbaryYoung的评论,更改为“连接”表


多对多可以作为这种模式的描述。如果不了解系统的所有需求,就很难做出任何明确的声明。最大的问题是,这些删除列是指文档本身还是指文档与其他表(例如表2)的关系。假设它们是参照关系本身的,那么将它们按您所拥有的方式放在表中是完全正确的。尽管多对多模式通常在一个表中只有两个ID,但这根本不是必需的


如果这些删除列引用了文档本身,则应将它们上移到该表中,否则您将在多个位置复制数据,并且必须担心保持所有数据的同步,这是一个非常令人头痛的问题。

如果您要有一个更深入的审计跟踪,跟踪多个列的状态变化,我会说,在这种情况下,您应该有单独的审计跟踪表,在处理事务时也会保留到这些表中。因为您在这里基本上只关心整个表的3个状态更改(即CrUD操作),所以我认为在这里只需要增加审计跟踪列就可以了:create_datetime、update_datetime和指示更新状态或性质的status_标志(例如,这是删除操作、更新操作还是描述修改的其他值得注意的状态)。您当然也可以有第四列,一个描述字段,描述状态更改的性质。

可能使用supertable?如果有任何意见,我将不胜感激


显然有人不同意我的观点,但似乎无法解释原因。嗨,汤姆,它们与关系有关,而不是文档。只是好像我有一堆列,它们被复制到许多表上,通常看起来是错误的。但是,在这种情况下,我看不出如何移动它们。如果这些列保持不变合法数据那么,在许多不同的地方重复使用这些列名并不重要。如果我在数据库中使用“name”,那么它出现在多个表中并不一定是坏事。“多对多表”对于这些表来说,这不是一个常见的术语,也不是一个很好的术语,因为这听起来像是在错误地将关系称为表。我听说这些类型的表的术语是映射表、联接表和关系表。Oh和连接表具有多个具有相同架构的表通常是一个标志或糟糕的设计。只是表示表、关系(如在关系模型中)或关系(如在E-R建模中),因为表/关系表示一种关系。(“关系”通常也表示“外键”。)但请描述这种关系,即用户需要知道什么才能放入或保留一行,即他们通过看到放入或保留一行知道什么。“Has”表示什么。任何关系都可以称为“Has(与某事物有关)”关系。通过给出一个列名称的句子来表达哪种关系,当一行插入其中时,该列名称会成为一个语句。@rbaryyoung肯定X表是代表X关系/关联的表/关系?特别是当一个人的图表被用来描述表/关系而不是E-R实体和关系类型时es或集合?(可能您使用关系作为关系/关联的同义词?)嗨,Dave,这个审计跟踪列将驻留在哪里?它们需要在连接表中吗?它们不能在
文档
实体表中,因为值根据连接到它的表的不同而不同。根据您的模型,我认为它们必须在连接表中。FWIW,虽然我通常建议不要,但有些在违反正常形式的情况下复制列的情况更容易处理。