之前我创建了很多数据库,但我从未将两个表连接在一起。我试过环顾四周,但找不到为什么一个需要将两个或多个表连接在一起。
有一个很好的教程here可以解决数据库关系,但不能解释为什么需要它们。他只是简单地说他们是。
他们真的有必要吗?我理解(在他的例子中)所有订单都有一个客户,因此可以将订单表链接到客户表,但我不明白为什么这是绝对必要的。我可以(并且已经)创建了购物车和其他复杂的数据库,这些数据库工作得很好而不会创建任何表关系。
我刚刚开始使用MySQL Workbench v6.0来寻找一个拥有相当大而复杂的数据库的新项目,所以我想知道我是否因为没有关系创建整个项目而失去任何东西?
注意:如果此问题过于笼统或偏离主题,请告诉我,我会更改。我知道关于这个主题可以说很多,所以我真的只是想知道我是否通过不使用关系来解决任何安全问题或重大性能问题。请具体说明您的回复; “是的,你正在打开自己的性能问题”对我自己没用,也没有帮助,也没有其他人在以后查看这个帖子。请在回复中提供详细信息和详细信息。
提前谢谢!
答案 0 :(得分:2)
正如Sam D在评论中指出的那样,整本书都可以写成关于数据库设计的内容,以及为什么拥有关系的表可以很有意义。
那就是说,从理论上讲,你只需将所有东西都放在同一张桌子里,就绝不会失去表现力/计算能力。反对这样做的主要论点可能涉及可能出现的性能和维护问题。
答案 1 :(得分:1)
答案围绕粒度,空间消耗,速度和细节。
与其他数据相比,本质上不同类型的数据会更强烈粒度,因为项目总是可以汇总到更大的保护伞。对于连锁商店,销售的商品可以汇总成交易,交易可以汇总到注册批次,注册批次可以累计到商店销售,商店销售可以累计到公司销售。这两个选项是:
在第一种情况下,将存在大量冗余数据,因为在430的位置3处出售的每个项目将具有商店,日期,批次,交易和项目信息。当您可以非常轻松地创建用于其独特目的的分离表时,冗余数据会占用大量空间。
在这个例子中,假设每天有一千笔交易,总共有一百万件商品从该商店出售。通过创建单独的表,您将拥有:
我确定你问的是节省空间的地方......每个记录都在详细信息中。商店表有姓名,地址,电话等。寄存器有号码,购买日期,经理协调等。交易有客户,日期,时间,金额,税金等。如果这些值重复每个记录超过单表这将是一个巨大的数据冗余,加起来远远超过将一个表中的字段(事务ID)链接到另一个表(项目ID)中的字段所导致的空间消耗表明这种关系。
此外,消耗的空间量以及整个表的大小会反映您查询该数据的速度。通过保持表小,并利用关系标识符来链接它们,可以大大增加响应时间。每次查询引擎需要找到一个值时,它会遍历表,直到找到它为止(这是一个严重的过度简化,但并非不真实),因此表越大越宽,查找时间越长。这些问题并不存在于数据量微不足道的情况下,但对于处理数百万,数十亿,数万亿条记录(我为其中一条记录工作)的组织而言,将所有内容存储在一个表中会使应用程序无法使用。
在这个主题上有非常非常多的内容,但希望这会提供更多的洞察力。
答案 2 :(得分:1)
简答:在像MySQL这样的关系数据库中是的。请查看有关参照完整性http://databases.about.com/cs/administration/g/refintegrity.htm
的信息这并不意味着您必须为项目使用关系数据库。事实上,趋势是使用非关系数据库(NoSQL),如MongoDB,以更好的性能实现相同的结果。有关RDBMS与NoSQL http://www.zdnet.com/rdbms-vs-nosql-how-do-you-pick-7000020803/
的更多信息我认为通过这个例子你会更好地理解:
我们想要创建在线商店。我们至少拥有用户,付款和活动(关于用户导航的页面或其他操作的事件)。在这种情况下,我们希望以安全和关系的方式链接用户和付款。我们不希望付款丢失或分配给其他用户。因此,我们可以使用像MySQL这样的RDBMS来创建用户和付款表,并将其与正确的外键相关联。然而,对于这些事件,我们将为每个用户(可能是数百万)做很多事情,我们需要快速跟踪它们而不会破坏关系数据库。在这种情况下,像MongoDB这样的No-SQL数据库非常有意义。
总结可以使用SQL和NO-SQL的混合,但要么使用其中一种,要么使用其他或两种解决方案,请正确执行。