2 qqqwwweeerrrttt123 qqqwwweeerrrttt123 于 2016.01.20 23:04 提问

数据库联合主键问题,各位大神过过眼

急救,如果这数据库中使用工号(不可使用递增)和日期做联合主键,来确定查询数据的唯一性,我该怎么处理

3个回答

caozhy
caozhy   Ds   Rxr 2016.01.20 23:15

如果你是开发实际项目,建议你的主键不要和任何业务相关,万一你的老板说,工号和日期也允许重复,或者你需要分库并库,你就给自己挖坑了。
你只要把工号日期做一个唯一约束就可以了。

qqqwwweeerrrttt123
qqqwwweeerrrttt123   2016.01.21 08:40

#机构信息表
T_GX_JGXX = Table('T_GX_JGXX',con.metadata,
Column('YXJGDM', String(30), nullable=False,doc='银行机构代码'),
Column('NBJGH', String(30), nullable=False,primary_key=True,doc="内部机构号" ),
Column('YXJGMC', String(200), nullable=False,doc="银行机构名称" ),
Column('JRXKZH', String(30), nullable=False,doc="金融许可证号" ),
Column('JGLB', String(30), nullable=False, doc="机构类别:其他,总行,分行,支行,网点 "),
Column('YZBM', String(6), nullable=False, doc="邮政编码"),
Column('WDH', String(30), doc="网点号" ),
Column('YYZT', String(10), nullable=False,doc="营运状态:营业,停业,被合并" ),
Column('CLSJ', String(8), nullable=False, doc="成立时间"),
Column('JGGZKSSJ', String(6),doc="机构工作开始时间" ),
Column('JGGZZZSJ', String(6),doc="机构工作终止时间" ),
Column('JGDZ', String(400),nullable=False,doc="机构地址" ),
Column('FZRXM', String(100),doc='负责人姓名'),
Column('FZRZW', String(60),doc='负责人职务'),
Column('FZRLXDH', String(30),doc='负责人联系电话'),
Column('CJRQ',String(8),nullable=False,primary_key=True,doc='采集日期'),
info={'doc':'本表只报送实际发生业务的实体机构,包括业务中心,不报送虚拟机构。上级管理机构名称(SJGLJGMC)应为该表中存在的机构,如果是虚拟机构,则应当归并到同级的实体>机构中'},
)

#员工表
T_GX_YGB = Table('T_GX_YGB',con.metadata,
Column('GH', String(30), nullable=False,primary_key=True,doc='工号'),
Column('YXJGDM', String(30), nullable=False,doc='银行机构代码'),
Column('JRXKZH', String(30), nullable=False,doc="金融许可证号" ),
Column('NBJGH', String(30), ForeignKey('T_GX_JGXX.NBJGH'), nullable=False, doc="内部机构号"),
Column('YXJGMC', String(200), nullable=False,doc="银行机构名称" ),
Column('XM', String(30), nullable=False, doc="姓名"),
Column('SFZH', String(30), nullable=False, doc="身份证号:隐私,监管部门变形"),
Column('LXDH', String(30), doc="联系电话:区号-座机号码/手机"),
Column('WDH', String(30), doc="网点号"),
Column('SSBM', String(60), nullable=False, doc="所属部门"),
Column('ZW', String(60), nullable=False, doc="职务"),
Column('YGZT', String(30), nullable=False, doc="员工状态"),
Column('GWBH', String(60), doc="岗位编号"),
Column('CJRQ', String(8), nullable=False,primary_key=True, doc="采集日期"),
如上所述 如果下表只用上表的“内部机构号”做外键,但是需要采集时间一起确定数据准确性,我该如何处理

beau_lily
beau_lily   2016.01.21 10:39

1、不建议做什么外键 不然到时候删除主表数据的时候要判断从表是否有主表数据
2、你用查询确定唯一性 要么给相关的联合字段做唯一约束 要么增加条件

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
是个很不错的YM,磁盘可操作扇区
上次一朋友发给的,我不熟悉,传上来给论坛各位大虾过过眼
vs2010+opencv2.4.9运行时候出现问题?求助各位
参考书目是OpenCV3 编程入门 程序是: # include using namespace cv; int main () { VideoCapture capture("1.avi"); while (1) { Mat frame; capture>>frame; imshow("reading video", frame); waitKey(60000);
SQL 2005 修改表联合主键
--ALTER  TABLE 表名 DROP  CONSTRAINT [主键名] --ALTER  TABLE 表名 ADD   CONSTRAINT [新主键名] PRIMARY   KEY  ([列名]) --修改表联合主键,首先必须保证字段为NOT NULL
联合主键和数据库中的三种表
在一张表中建立两个主键 建立联合主键有两种方法 1.建立主键有两种方法:一种是在数据库提供的GUI环境中建立,另一种是通过SQL语句执行建立,下面分别介绍。 1).在数据库提供的GUI环境中建立(以SQL7为例)。 输入表信息后按Ctrl键同时选中多行,然后点上面的主键按钮就行了。 2).通过SQL语句执行建立。又分两种,一是在建表语句中直接写,二是建表之后更改表结构。 在建表
数据库联合主键
联合主键就是用2个或2个以上的字段组成主键。用这个主键包含的字段作为主键,这个组合在数据表中是唯一,且加了主键索引。      比如,你的订单表里有很多字段,一般情况只要有个订单号bill_no做主键就可以了,但是,现在要求可能会有补充订单,使用相同的订单号,那么这时单独使用订单号就不可以了,因为会有重复。那么你可以再使用个订单序列号bill_seq来作为区别。把bill_no和bill
数据库创建联合主键(MySql)
demo CREATE TABLE applicant( uid INT NOT NULL, tid INT NOT NULL, PRIMARY KEY(uid,tid) )
ThreeLayerLib源代码
ThreeLayerLib.dll的源代码,请各位大神多多指点其中存在的问题,不胜感激,再次感谢各位大神对在下的关注和指点!
Oracle中主键和唯一索引的区别oracle中联合主键的作用
在创建主键的同时会生成对应的唯一索引,主键在保证数据唯一性的同时不允许为空, 而唯一索引可以有一个为空的数据项,一个表中只能有一个主键,但是一个主键可以有多个字段,一个表中可以有多个唯一索引。 联合主键只是让记录联合的那几个字段总体上是唯一的,比如id1 id2 id3三个列作为联合主键,那么在这个表中可以有多个id 为1的,但肯定只有一个1 0 0。
数据库为何要有复合主键(多主键)
为啥需要复合主键?
数据库多个主键(联合主键)
创建某表,需要两个主键(INST_ID,INST_RESP_CODE) CREATE TABLE CODE_CONVERTER_20170806 ( INST_ID CHARACTER(4) NOT NULL, INST_RESP_CODE VARCHAR(32) NOT NULL, TRANS_CODE VARCHAR(8) NOT NULL, INST_RESP_MSG VARCHA