多对多表结构的设计有什么优点?

问题描述

最近看到一个朋友说自己公司使用的表结构为多对多的关系,现在他们的customer已经860万了,而中间表m_customer_category 也有900多万了,如果按类型查找客户资料的话巨慢,就是customer,m_customer_category,custoemr_category三张表多对多关系,现在使用客户类型快速查找非常慢。然后自己也想了想这种设计,感觉查询确实非常郁闷,而且想不出它到底有什么优势。希望大家一起来讨论讨论。 问题补充:quickphp 写道

解决方案

首先Customer与Order不是一对多的关系吗?一个客户可以有多个订单,一个订单只能属于一个客户,如果像我说的,首先表的设计就有问题不过如果你真要这么设计的话...首先考虑客户类型和订单状态字段是否有做索引的需要,select t3.* from( select * from Customer where customer_type=80 ) t1 inner join Customer_Order t2 on t1.customer_id=t2.customer_idinner join ( select * from Order where order_state='已经到帐') t3 on t2.order_id=t3.order_id
解决方案二:
1.首先要确定的customer与custoemr_category是不是多对多的关系,如果是的话,建议这么做,因为这么做可以尽量的满足范式,至于范式的作用你可以自己去查,当然范式也不是死的,有的时候为了业务的需要也会做一些反范式的设计的,但是一般来说还是尽量按范式来设计.2.还有就是对于大数据量的优化问题了,索引,分区,数据水平切分等技术,3.还有就是维护的问题,如果你觉得麻烦可以考虑用级联操作
解决方案三:
中间表就是用来存放关联关系的,尤其是多对多得时候,如果你只用Customer和Order两张表来存多对多,肯定是可以得,但是,在Customer表里就会有那么几条记录,绝大部分内容都一样,唯独OrderID不一样。这个好像挺浪费空间的。
解决方案四:
以前公司都不用哪种关联,现在公司都用。我也给问了他们为什么要用,大家说不出所以然来,反正一直都在用,等待答案。
解决方案五:
Customer,Order关联 只需要1对多就可以了,多对多的情况是有的,不过感觉不适用你的需求。
解决方案六:
个人感觉,Customer_Order这个没啥用,直接用Customer,Order关联不就可以了吗
解决方案七:
无论多对多还是什么多,都必须在两个主表里存储冗余数据,中间表崩溃的可能性非常大,如果中间表损坏,那么你的数据是不是都成了孤岛,尽管中间表使用联合主键来查询速度也不会说很慢,但是如果主表里有冗余数据岂不是根本不用连表,中间表的作用不过就是存储原始数据而已,可作为冗余更新的凭证

时间: 2024-09-09 11:00:16

多对多表结构的设计有什么优点?的相关文章

link环境下制作一款《订餐软件》,同一款菜品价格不同的表结构的设计是什么?

问题描述 link环境下制作一款<订餐软件>,同一款菜品价格不同的表结构的设计是什么? link环境下制作一款<订餐软件>,同一款菜品价格不同的表结构的设计是什么? 解决方案 不需要设计很多表,直接用一个字段表示当前订单的价格,做成类似快照就可以了.

关于权限管理数据库表结构的设计问题

问题描述 关于权限管理数据库表结构的设计问题 我们的需求是: 1. 创建不同的用户,可以分配不同的角色 2. 每个角色都可以自由分配不同的权限, 也可以创建新的角色,分配相应的权限 3. 权限细化到每一个菜单(共有三级菜单,细化到第三级的菜单) 单纯用 user表 role表 right表 user_role表 user_right表 五张表 可以实现吗? 具体应该怎样设计呢? 没有金币,希望大家帮帮忙~~~ 解决方案 http://www.cnblogs.com/leoxie2011/arch

做一个英语考试系统,请教一下完型填空题型的表结构怎么设计比较好呢?

问题描述 做一个英语考试系统,请教一下完型填空题型的表结构怎么设计比较好呢? RT做一个英语考试系统,请教一下完型填空题型的表结构怎么设计比较好呢? 解决方案 存储序列号,比如 1,2,3,4代表abcd,你从后台输入正确答案abcd再对应 1,2,3,4,存储到答案表里. 用户输入abcd,存入数据库为1,2,3,4,根据外键对应即可. 解决方案二: 设计两个主要字段,一个存填空题本身,一个存填完答案的题目 解决方案三: 键值对 哈希表 一个存储填空题本身,另一个存储解答后的题目

link环境下《网盘软件》支付码的表结构怎么设计?使用的是clodefirst技术

问题描述 link环境下<网盘软件>支付码的表结构怎么设计?使用的是clodefirst技术 link环境下<网盘软件>支付码的表结构怎么设计?使用的是clodefirst技术 解决方案 支付码id 支付码 是否使用 有效期 面值 创建日期 等等

请问这个表结构如何设计?

问题描述 现在有一张表table1,字段A1,A2,A3....An:用另一张表table2存放用户对table1所关心的字段名称,比如U1用户关心A1.A3字段,U2用户关心A2.A4字段,这个表table2该怎么设计呢?现在的方式感觉很弱,如果修改起来很不方便:varchar(n) varchar(n)U1 table1.A1,table1.A3U2 table1.A2,table1.A4求指教.或者是改用视图而不是用表? 解决方案 varchar(n) varchar(n) U1 tabl

联合登陆 表结构 账号-联合登陆本地存储哪些信息

问题描述 联合登陆本地存储哪些信息 用qq,或者新浪微博,或者支付宝等登陆网站,我需要在本地存储哪些信息? 假定一个情景,用户使用qq登陆我的网站后,使用某一项功能,需要充值10个Q币才能使用,我本地 需要记录用户的哪些信息?(可能需要和本网站账号关联,但也可能没有本网站账号,不用关联) 具体数据库表结构这么设计 谢谢

表单-多表头和可变表头(一条信息的数据量大小可变。)该怎么设计数据库的表结构。

问题描述 多表头和可变表头(一条信息的数据量大小可变.)该怎么设计数据库的表结构. 我现在有一个表单需要存入数据库.但是客户要求该表单的 表头可变.也就是他要自定义表单.这种情况我该怎么为这张表单设计表结构了?同时该表单中的所有字段都要参加计算的,有些项的值是其他项通过计算得出的.虽然是简单的加减乘除,但是客户要求可以自动的计算.小弟用的Spring MVC+JPA 数据库mysql 或者 oracle 解决方案 一般一个表单中的字段分为固定的字段和 动态的字段. 将固定的字段,设计成一张表,称

针对复杂的多级栏目该如何设计数据库表结构?

问题描述 针对复杂的多级栏目该如何设计数据库表结构? 比如可能存在如下几种情况: 主栏目1-->子栏目2-->子栏目3-->内容列表-->内容 主栏目2-->子栏目2-->内容列表-->内容 主栏目3-->内容列表-->内容 如果说为了开发和后期维护的方便,以及后期新的内容添加或删除方便,栏目表应该如何设计比较符合规范? 比如栏目按照一定规则拼接放到一个字段里: 主栏目1|子栏目11|子栏目111 主栏目2|子栏目21|子栏目212|子栏目2121 或

mysql-新人求助,今天老大让我设计&amp;amp;quot;项目管理系统&amp;amp;quot;表结构,有点晕。

问题描述 新人求助,今天老大让我设计"项目管理系统"表结构,有点晕. 让我今天想需求,明天把表设计出来.啥都没说,只说了一句话:""管理我们公司做的web项目,可以参考帝国cms""我也去下载了,打开看了下,那玩意儿是快速建站用的,跟项目管理系统没啥关系啊,到现在还没多少头绪,大牛们说说,他说的那句话几个意思,""管理我们公司做的web项目,可以参考帝国cms"",我现在有点萌,是要一个快速建站的需求还是管