我在下面定义了两个表。
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 表的主键和外键,因此存在完整性约束和所有爵士乐。我遇到的问题是一个功能请求,它允许使用票证 ID(即 00070)进行零填充。据我所知,现在整数不能用零填充存储。
我想出的解决方案是在票证表中添加一个ticketID varchar(8) not null 列,并使用两个表的实际ID 作为代理键。然后,ticketregistration 表的外键将指向ticketid。
我的问题是关于效率和速度。以前我可以在系统中添加票证注册,并且数据库将对添加进行完整性约束,以查看具有相同 id 的票证是否在数据库中。现在我有一个 varchar 字符串作为 id 将被索引。
当客户“注册一张票”时,将ticketid varchar保留在ticket表中并在ticketregistration表中使用ticketid的外键(也是varchar(8))会更容易吗?
或者在ticketregistrations中没有ticketid varchar(8)会更容易吗,将ticket表的外键保留为ticketregistrations表的主键,并首先检查ticket表中的ticketid,检索值并输入它在ticketregistrations 中排成一排?
这将在每次插入ticketregistrations 表之前在tickets 表上创建索引varchar 搜索。
我最初的解决方案不需要这个,因为参照完整性解决了这个问题。
我担心寻找时间。