问题描述
- 数据库联合主键问题,各位大神过过眼
-
急救,如果这数据库中使用工号(不可使用递增)和日期做联合主键,来确定查询数据的唯一性,我该怎么处理
解决方案
如果你是开发实际项目,建议你的主键不要和任何业务相关,万一你的老板说,工号和日期也允许重复,或者你需要分库并库,你就给自己挖坑了。
你只要把工号日期做一个唯一约束就可以了。
解决方案二:
#机构信息表
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="采集日期"),
如上所述 如果下表只用上表的“内部机构号”做外键,但是需要采集时间一起确定数据准确性,我该如何处理
解决方案三:
1、不建议做什么外键 不然到时候删除主表数据的时候要判断从表是否有主表数据
2、你用查询确定唯一性 要么给相关的联合字段做唯一约束 要么增加条件