首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >索引varchars和外键

索引varchars和外键
EN

Stack Overflow用户
提问于 2019-04-07 23:41:37
回答 2查看 0关注 0票数 0

我在下面定义了两个表。

Create table tickets (id long not null,
reseller long not null,
constraint pk_lock primary key (id)); 

Create table ticketRegistrations (id long not null,
customer long not null,
constraint fkTicketRegistrationTicket 
  foreign key (id) references tickets (id) on update cascade); 

客户端可以输入票证(因此没有主键的自动增量)。由于id是ticketregistrations表的主键AND FOREIGN KEY,因此存在完整性约束和所有爵士乐。我遇到的问题是一个功能请求,它允许零填充与票证ID(即00070)。现在,就我所知,整数不能以零填充存储。

我提出的解决方案是在故障单表中添加ticketID varchar(8)not null列,并将实际ID用于BOTH TABLES作为代理键。然后,ticketregistration表的外键将指向ticketid。

我的问题是关于效率和速度。以前我可以在系统中添加票证注册,并且数据库会在添加时执行完整性约束,以查看具有相同ID的票证是否在数据库中。现在我有一个将被索引的id的varchar字符串。 当客户“注册票证”时,更容易将票证表中的ticketid varchar保留在票证注册表(也是varchar(8))中使用ticketid的外键吗?

或者更容易在ticketregistrations中没有ticketid varchar(8),将ticket表的外键保留为ticketregistrations表的主键,并首先检查ticket表中的ticketid,检索值,然后输入它在票据登记中排成一排?

这将在每次插入ticketregistrations表之前在ticket表上创建索引varchar搜索。

我的初始解决方案并不需要这个,因为参照完整性可以解决问题。

EN

回答 2

Stack Overflow用户

发布于 2019-04-08 08:21:41

我会留下ids和外键ley限制。添加第二个varchar计算列,并添加前导零。将第一列用于所有工作并显示第二列。

票数 0
EN

Stack Overflow用户

发布于 2019-04-08 09:16:03

我有两个解决方案。

第一个是在票证表中有两列标识符。一个应该是一个仅内部标识符,用于引用(意味着你可以自动增加它)。关键点是该列不会与任何输入数据相关联。第二列将包含用户输入的id的字符串表示形式。然后,您可以在第二列上添加唯一索引以进行搜索。

第二种是保持表的原样,但只显示带有零填充的id到指定的长度(即,用户只能输入6位数)。所以无论你需要显示一个id,都要调用一个填充它的函数; 输入票号时,剥离任何填充并转换为整数。如果您已经在问题中围绕数据库结构编写了整个应用程序,那么此解决方案将更容易实现。如果您认为在应用程序的生命周期中数字位数将是一个变量,它也会更灵活。

如果可行,您可以实现两个解决方案,向表中添加第二个数字列,然后执行零填充显示内容。

无论您最终使用哪种解决方案,如果要求您添加对包含字母和数字的故障单标识符的支持,请考虑您必须更改的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档