数据库多个表有重复的字段

比如说数据库有a,b,c,d,e,f,g这几个表都有几个字段是相同的,例如描述字段,更新时间字段
修改人字段等等,这个时候是单独抽出一个表记录这些重复信息,用外键关联,还是就让他有多个重复字段算了

9个回答

如果这些字段很少或者根本不修改,那么直接嵌入性能更高。
如果是数据一致性敏感的内容,就必须关联查询。

重复字段中的数据是否一致,如果不一致则保留原来的;若数据完全一致,则用外键关联就好。

按照我的经验,表的字段至少包含两部分信息:关键信息、属性。像表中自增字段、业务主键(候选键)都是关键信息,像描述字段,更新时间字段都属于属性,这些字段是这个表中不可缺少的,更有可能一个新的需求变更,这些属性就会升级为外键。一般来说就放在那里就可以了。

其实两种方法都可以,第一种可能逻辑比较清晰易懂,但是有时候可能会有点饶人,第二种好处就是简单,但是可能性能上有点不太好

个人支持第二种,虽然性能有损耗,但会避免很多不必要的问题。

我觉得还是就这样放着就好了,外键关联的话之后这些字段如果有变动那么修改也会比较多

外键一般只能是主键或唯一列,现在计算机存储都比较便宜了,空间不是问题,字段重复不算大问题,代码清晰好写也很重要,像描述信息最好不要通过外键去
引用,引入外键最大的问题是需要联接查询,在数据量大的时候应当减少表连接查询,所以不用单独抽出去

其实这个跟java中定义常量类差不多,自己定得失。

根据业务场景决定,个人不建议使用外键关联。首先我们要清楚这些字段的用途,如果就是记录对数据变更的属性(比如创建时间 创建人 修改时间 修改人等)字段时,建议直接作为这张表的一个属性,就我们的用途而言,大多数是查看数据的变更记录或是向其他系统推送变更数据,这样做会比较方便,若使用关联表,感觉有点多此一举了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
统计多个表的字段.
CREATE PROCEDURE vertex_sg_jc_hjrn@ksrq char(7),rn@jsrq char(7),rn@wlbm char(12)rn ASrnselect sum(sg_sld.实收数量)as 实收数量,sum(sg_bld.数量)as 补料数量 from sg_sld,sg_bld wherern ((convert(varchar(7),sg_sld.收料日期,121)>=@ksrq and convert(varchar(7),sg_sld.收料日期,121)<=@jsrq and sg_sld.物料编码=@wlbm)) andrn ((convert(varchar(7),sg_bld.出库日期,121)>=@ksrq and convert(varchar(7),sg_bld.出库日期,121)<=@jsrq and sg_bld.物料编码=@wlbm))rnGOrn本来有五个表,现在用二个来试测一下.结果收料数量比实际的多了五倍,补料数量是正确的.这个一定我的语句写的不正确,请教那位高手指点.rn
一个表有600多个字段.......?
由于业务需要,我有个表需要设计成650个字段,除了主键标识外,其余都是NUMBER类型,各位有没有人设计过这么多列的表的,或做过测试,设计这么多字段对性能有没不良影响?
怎么删除多个字段重复?
[color=#FF0000]ID MobileArea MobileNumber AreaCode MobileType PostCodern64 上海 上海 1330063 21 上海电信CDMA卡 200000rn65 上海 上海 1330064 21 上海电信CDMA卡 200000rn67 上海 上海 1330066 21 上海电信CDMA卡 200000rn81 上海 上海 1330080 21 上海电信CDMA卡 200000rn82 上海 上海 1330081 21 上海电信CDMA卡 200000rn83 上海 上海 1330082 21 上海电信CDMA卡 200000rn84 上海 上海 1330083 21 上海电信CDMA卡 200000rn85 上海 上海 1330084 21 上海电信CDMA卡 200000rn86 上海 上海 1330085 21 上海电信CDMA卡 200000rn87 上海 上海 1330086 21 上海电信CDMA卡 200000rn88 上海 上海 1330087 21 上海电信CDMA卡 200000rn89 上海 上海 1330088 21 上海电信CDMA卡 200000rn90 上海 上海 1330089 21 上海电信CDMA卡 200000rn99 上海 上海 1330098 21 上海电信CDMA卡 200000[/color]101 北京 北京 1330100 10 电信CDMA卡 100000rn[color=#0000FF]102 北京 北京 1330101 10 电信CDMA卡 100000rn103 北京 北京 1330102 10 电信CDMA卡 100000rn104 北京 北京 1330103 10 电信CDMA卡 100000rn105 北京 北京 1330104 10 电信CDMA卡 100000rn106 北京 北京 1330105 10 电信CDMA卡 100000rn107 北京 北京 1330106 10 电信CDMA卡 100000rn108 北京 北京 1330107 10 电信CDMA卡 100000rn109 北京 北京 1330108 10 电信CDMA卡 100000rn110 北京 北京 1330109 10 电信CDMA卡 100000rn111 北京 北京 1330110 10 电信CDMA卡 100000rn112 北京 北京 1330111 10 电信CDMA卡 100000[/color]rnrnrn红的是重复的 绿色的是重复的。我只想留下向红蓝各一条。 根据MobileArea 和MobileType筛选,怎么写SQL语句,用的是ACCESS数据库
Oracle 多个字段重复查询
–查询重复数据 select * from app_jf_value t1 where (t1.jfindcode, t1.areacode, t1.kpitype, t1.created_at) in (select jfindcode, areacode, kpitype, created_at
MySQL 过滤多个重复字段
MySQL 执行查询时,如果需要从记录中过滤多个重复字段,可通过以下方式 更多精彩 更多技术博客,请移步 asing1elife’s blog 实现方式 关键点在于 COUNT(DISTINCT vs.name) ,DISTINCT 是 MySQL 用于过滤重复字段的关键字,但其默认只能紧跟在 SELECT 之后 此处通过 COUNT() 函数将其包裹后在指定字段,即可实现过滤效果 注意...
SQL中删除单字段重复和多个字段重复的方法
--删除OrderDetails表中materialscode字段重复的行,只保留ID最小的一行数据 delete from OrderDetails where materialscode in (select materialscode from OrderDetails group by materialscode having COUNT(*)&amp;gt;1) and ID not in...
筛选表中多个字段的数据是否重复...
我数据库中有一个表test,包括id(int)主键、name(nvarchar(50))、name1(nvarchar(50)) 这3个字段。rnrnid name name1rn 1 a1q bsern 2 x3a psern 3 b22 b22rn 4 a6k ly3rn 5 a22 a22rnrn如何把 name 和 name1 这两个字段中重复的数据( id 是3、5 的数据)筛选出来...Sql语句该如何写rnrn
mysql sql找出一个表中多个字段重复的值
SELECT    s.periodsno,s.sitename,t.* FROM    subcampaign_doctor t LEFT JOIN `subcampaign` s ON s.id=t.subCampaignId WHERE   (SELECT COUNT(1) FROM subcampaign_doctor WHERE subCampaignId=t.subCampa
在一个表中如何重复统计多个字段
id leixing banzu guoqi shijianrn1 A 班组1 T 2011-7-1rn2 A 班组2 F 2009-9-1rn3 B 班组2 T 2011-8-1rn4 C 班组1 F 2011-9-1rnrnrn在上面的表中,我要得到一组数据:在时间(shijian)2011-7-31前所有记录中,班组1 的过期(guoqi)的记录多少,班组1的 总记录多少, 类型(leixing)A的记录多少,B的记录多少rnrn用一条sql能实现吗?rn请赐教
MySQL 表中多个字段重复只保留一条数据
1、使用sql语句进行查询(多个字段重复) select  * from  test1 group by factory_name,model_name,hard_version  having count(*)>=1 2、将查到的数据导出为csv文件 3、清空表 truncate test1 4、使用mysql yog   在test1表右键-》导入-》导入加载本地csv数据
请教update表 多个字段
在SQLserver中有这样2个表:id为关键字rnrn tb1: rn ID name yuwen shuxue ...rn 1 a 10 20rn 2 b 10 20rn 3 c 10 20rn rn tb2: rn ID name yuwen shuxue ...rn 1 x 20 20rn 2 b 10 10rn 3 c 10 20rn 4 y 30 40rnrn想用tb2去更新tb1,如果id相同,则更新所有字段;如果id不存在,则添加。rnrnSQL语句怎么写?谢谢
多表查询返回多个表的字段
可以使用Map来做返回值 Mapper.xml中:  MapperDao中:  Controller中:  
Mybatis count多个表的字段
&amp;lt;select id=&quot;getAllNum&quot; resultType=&quot;java.util.HashMap&quot;&amp;gt; SELECT * from ( SELECT &quot;COUNT&quot;(ID) as zzjgNum FROM CWL_ZZZZ_ZZJG ) , ( SELECT &quot;COUNT&quot;(ID) as zzdwNum FROM CWL_ZZZZ_ZZDW ), ( ...
如何过滤数据库重复字段
如题:rnSELECT b.zpzw,a.pname,a.qyname, a.qyfrom rnFROM Company_Basemeans AS a LEFT OUTER JOIN invite_info AS b rnON a.qyname = b.qyname2rnwhere (b.zpzw like'%文案%' or a.qyname like'%传媒%') rnorder by b.uptimernrn现在输出时a.qyname会有重复的记录rn我想只要其中的一条怎么处理好呢rn这样写distinct(a.qyname)是无效的,杯具
【数据库 Oracle】--去除重复字段
一提到去重,首先想到了distinct,但是distinct使用有很多限制,distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返 回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。     下面,我们通过一个简单的实例来说明一下:     表结构如下:
数据库 ,表,字段
在一个数据库1中rnupdate 表1rnset 字段=数据库2..表.字段rn能这样写吗?rn
检查字段是否有重复
今天突然来个任务,检查数据库中的某个字段是否有重复,一下不知道怎么做,上网查了下,原来只需要如下一行代码就能解决, SELECT row ,COUNT(*) FROM table GROUP BY row HAVING COUNT(*)&gt;1 记下留着以后备用。...
中间表有字段
高手们,路过的请看看,指点下小弟!!n n 我在做项目的过程中有这样一个问题,我有两个表,他们之间是多对多的关系,我用一个中间表关联起来,但是中间表里面有自己的字段,这样的话我就必须把多对多改成两个一对多。n n n 比如:用户表(TUser)和部门表(TDepartment)(这里的用户可以同时属于多个部门)中间表(TDeptUser)n n 如果该成两个一对多的话,是不是这样n n 用户表一个对多个中间表n 部门表对多个中间表n n 这就是小弟的疑问,想请高手帮我确认下,如果是的话,能帮我解释下吗,好让我彻底的弄清楚。n n n 谢谢!!!
mysql 关于多个字段值重复的问题
下面是我的需求:rn首先把表中一些字段值相同的记录取出来,查出记录.rn然后.根据另一个字段值判断需要删除的记录,字段为e,如果记录中有字段e(e的值是1或者0)的状态是1,则把其他的记录删掉,只保留一条,如果e的值都是0,则比较字段f(时间字段),把f值最大的记录保留,其他都删掉rnrn实例:表A 有a,b,c,d,e,f,g 字段rn把A中a,b,c 三个值一样的记录作为重复记录rn比较值e(0,1)如果e有状态是1,则删除其他记录,否则比较值f(时间) 把f最大的记录保留,其他删除.rnrn
关于多个字段的去重复问题
假设有表test(id,name,age);rnID name agern1 s 12rn2 b 15rn3 c 12rn4 b 15rn . . .rn如何去除名字和年龄都个同的数据。
查找多个字段重复值的问题
请教大家个问题rntable 字段如下rnrnid school Area RecruitLevel artsscience year score rn1 '北京大学' '北京' 第一批 文科 2007 300rn2 '北京大学' '北京' 第一批 文科 2008 305rn3 '北京大学' '北京' 第一批 文科 2007 300rn4 '清华大学' '河南' 第一批 文科 2007 600rn5 '清华大学' '河南' 第一批 理科 2007 605rn6 '复旦大学' '上海' 第一批 文科 2007 300rnrn我想得出的结果为:rnrnid school Area RecruitLevel artsscience year score rn1 '北京大学' '北京' 第一批 文科 2007 300rn3 '北京大学' '北京' 第一批 文科 2007 300rnrn请大家给予帮助,不胜感激
mysql实现多个字段重复内容的查询
表结构如下rntime sip dip portrnrn2012-04-20 14:50:41 192.168.12.117 192.168.1.100 1173 rn2012-04-20 14:50:41 192.168.12.117 192.168.1.100 1173 rn2012-04-20 14:50:41 188.222.61.224 192.168.120.189 23690 rn2012-04-20 14:50:41 192.168.16.1 192.168.12.117 0 rn2012-04-20 14:50:41 139.86.96.146 192.168.120.189 23690 rn2012-04-20 14:50:41 192.168.12.117 192.168.1.100 1173 rnrnrn想要将sip、dip、port三项都相同的按 重复的次数从高到底排序 输出top20rnrn结果应该是这样 rnrn2012-04-20 14:50:41 192.168.12.117 192.168.1.100 1173 3次rn2012-04-20 14:50:41 188.222.61.224 192.168.120.189 23690 2次rn2012-04-20 14:50:41 192.168.16.1 192.168.12.117 0 1次rnrn如何用mysql实现,请大牛指点下?
查询时跳过多个字段重复的数据
select *, count(distinct Victory,Flat,Negative) from sporttery group by Victory,Flat,Negative; // 更简单的一种 select * from sporttery group by Victory,Flat...
根据一个表中字段查询多个表的字段
我现在有个表a,要根据表a中的“流水号”字段查询其他四个表b,c,d,e中的“原因”字段,这四个表中的“流水号”字段只是表a中的部分字段,我想实现把表a中的所有数据以及另外表中的“原因”字段在一起读取出来,如果另外四个表中查不到对应流水号,则在相应的表a中的数据行中显示为空。另外,另四个表中可能会有多条相同数据,也希望能按照表a的对应流水号显示在一条里。请教一下这样的SQL语句应该怎么写。我用的是JSP。拜托大家多帮忙了,谢谢!
由多个不同字段的表的字段创建一个新表
A表如下:rnrnid 字段1 字段2rn1 值1 值2rn2 值3 值3rn。。。。。。。。。。rnrnA表如下:rnrnid 字段3 字段4rn1 值5 值6rn2 值7 值8rn。。。。。。。。。。rnrn根据这两个表的字段生成一个新的表,新表的字段则是所有A、B表,根据ID来进行关联,即如下表rnrnid 字段1 字段2 字段3 字段4rn1 值1 值2 值5 值6rn2 值3 值3 值7 值8rn。。。。。。。。。。rnrn请问这个该如何实现啊?
一个表的多个字段和另一个表的同一个字段关联
表结构如下rnT1( id, codeA, codeB)rn------------------------------rn 1 1 11 rn 2 1 12rn 3 2 13rn 4 3 12rnrnrnT2(codeType, code, name)rn--------------------------rn A 1 杭州rn A 2 北京rn A 3 上海rn B 11 鞋子rn B 12 衣服rn B 13 裤子rnrn其中,T1表中的codeA,codeB都和表T2的code关联。rn现在我想根据T1得到T2表name字段的组合结果,如下:rn nameA, nameBrn------------------------rn 杭州 鞋子rn 杭州 衣服rn 北京 裤子rn 上海 衣服 rnrn请问这个SQL查询语句该怎么写?rn谢谢!rn
查询表中多个字段重复的数据记录
select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) &gt; 1)
如何消除多个字段重复的记录?
如下表:pricernProdNum, PriceType, Price, OpenDatern A 1 110 2005-9-15rn A 2 120 2005-9-15rn A 3 128 2005-9-20rn A 3 135 2005-9-15rn B.....rnrn我只想select得到按ProdNum,PriceType唯一的字段,消除ProdNum,PriceType重复的项.rn(例子中的前三行,不要第四行).
group by多个字段出现重复咋解决
开发中遇到这个问题 group by之后2个字段都必须去重复的 所以导致了日期一样 支付类型不一样 到页面便利数据就会出现图片的情况[img=https://img-bbs.csdn.net/upload/201904/24/1556108620_930394.png][/img][img=https://img-bbs.csdn.net/upload/201904/24/1556108638_407687.png][/img]
怎样快速去掉表中某个字段有重复的记录?
RT。
thinkphp多表查询两表有重复相同字段解决方法
框架:thinkphp 版本:3.2.3 内容:查询语句 解决问题:重复字段问题 $Data = M('a')->where($where) ->Field('a.name as aname,b.name as uname,a.*') ->join('b o
如何查出一个表中两个字段有重复的记录.
select lawunit,lawdate,count(*) from law_law group by lawunit,lawdate having count(*)>1rn用上面的可以查出两个字段重复的内容,但是要把所有这些重复的记录比如说这个表有个字段id,要查出来就查不了.
数据库同时更新多个字段
oracle : update T1 t1    set ( t1.a,t1.b) = (select t2.a, t2.b  from  T2 t2); sql: update T1 t1 set    t1.a = t2.a,t1.b=t2.b,t1.c=t2.c from T1 t11,T2 t2 where (t11.条件1) and (t2.条件2)
access多个表怎么删除重复的列???
access有多个表,每个表都有sampletime,数值是一样的。现在我要让它显示出来。SQL语句select * from A,B,C,D。但是ABCD表中的sampletime都显示出来了,怎么让它只显示一列。或一个表中的sampletime。其他的不显示。
是多个数据库还是多个表?
在安装了Petshop4.0以后我发现其在SQL Server 2000中总共创建了4个数据库,分别为:rn1. MSPetshop4rn2. MSPetshop4Ordersrn3. MSPetshop4Profilern4. MSPetshopServicesrnrn还有一些别的项目也看到别人可能把一些逻辑上不同类的东西放在数据库中。rn我想问一下这样做有怎样的好处?rn和我如果建立一个数据库,通过表来分类有何区别?比如以上面的Petshop为例,我如果建立一个MSPetshop4的数据库,rn然后属于以上4个数据库的表格分别约定命名为:rnT_Base_...rnT_Orders_...rnT_Profile_...rnT_Services_...rnrn请各位不喜赐教,谢谢:)
数据库多个表的查询问题
我在继承CRecordSet生成我的recordset类时,引入了不止一个表.rnCString CCommonRs::GetDefaultSQL()rnrn return _T("[index],[wdeng]");rnrnvoid CCommonRs::DoFieldExchange(CFieldExchange* pFX)rnrn //AFX_FIELD_MAP(CCommonRs)rn pFX->SetFieldType(CFieldExchange::outputColumn);rn RFX_Long(pFX, _T("[index].[wordID]"), m_wordID);rn RFX_Long(pFX, _T("[index].[fileID]"), m_fileID);rn RFX_Byte(pFX, _T("[index].[wordOffset]"), m_wordOffset);rn RFX_Long(pFX, _T("[wdeng].[wordid]"), m_wordid2);rn RFX_Text(pFX, _T("[wdeng].[word]"), m_word2);rn //AFX_FIELD_MAPrnrn可执行select [wdeng].[wordid] from [wdeng] 时rn获得的wdeng.wordid的值都赋给了m_wordID,而非m_wordid2rn请问高手这是为什么?rn
请问数据库多个表的问题?
rn如果数据库有A B C多个表, 如果我要读取或存储这几个表的内容,rn rn 1、首先连接数据库:rn strCnn="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sqlserver;Initial Catalog=server_data;Data Source=(local)";rn m_pConnection.CreateInstance(__uuidof(Connection)); //创建connection对象实例rnrn m_pConnection->Open((_bstr_t)strCnn, "", "", adModeUnknown);rnrn 2、连接表rn m_pRecordSet.CreateInstance(__uuidof(Recordset));rn m_pRecordSet->CursorLocation=adUseClient;rnrn m_strCmdLogMsg=_T(A); //得到表名Arn m_pRecordSet->Open((LPCTSTR)m_strCmdLogMsg,rn (LPCTSTR)strCnn,rn adOpenStatic,rn adLockPessimistic,rn adCmdTableDirect);rn rn 现在我想问如果我要对这几个表操作,那不是要建立三个向第二步那样的连接,定义三个_RecordsetPtr m_pRecordSet这样的???rnrn 因为我下面要分别对这三个不同的记录集进行操作,都要用到m_pRecordSet->next等这样的操作,rn rn 因此想问下各位,是不是有更加好的方法。谢谢。rn rn
数据库中多个表的联系?
问题一:rn 在数据库中有多个表,表中只有一个相同字段.rn怎么把这些表的内容全放到一个数据集Recordset中?rn用的是VC+ADOrnrnrn问题二:rn 多个表是怎么共用一个字段作为主键?rnrn问题二:rn Access数据库最多能存几个表?
C#怎么判断数据库中多个表中的不同的字段?
比如在"uaer"表中有个"vip"字段,该字段用是存储用户是不是高级用户,该用户登陆后只能看到高级会员的功能而其他的功能看不到,rn在存储论坛的信息表里面有"luntan"字段和要判断该用户是不是高级会员才能发表?
如何比较数据库中两个表中的多个字段的数据?
我现在遇到了一个问题,要比较两个表中的多个字段的内容,其中字段名是作为参数传入的,形式如下rnA表中字段 "a,b,c,d,e" 作为一个参数rnB表中字段 "a,b,c,d,e" 做为一个参数rn现在要比较A.a与B.a,A.b与B.b,A.c与B.c,A.d与B.d,A.e与B.e中的数据是否相同。表A和表B固定选除一条数据rn
相关热词 c# stream 复制 android c# c#监测窗口句柄 c# md5 引用 c# 判断tabtip 自己写个浏览器程序c# c# 字符串变成整数数组 c#语言编程写出一个方法 c# 转盘抽奖 c#选中treeview