我有兩個表定義如下。索引變量和外鍵
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)進行零填充。據我所知,整數不能用零填充進行存儲。
我想出了什麼解決方案是在ticket表中添加一個ticketID varchar(8)not null列,並將兩個表的實際id用作代理鍵。票證註冊表的外鍵然後指向ticketid。
我的問題是關於效率和速度。以前,我可以在系統中添加票據註冊,並且數據庫會對添加進行完整性約束,以查看具有相同ID的票證是否在數據庫中。現在我有一個varchar字符串作爲將被索引的id。
當客戶「註冊票證」時,將ttytid varchar保留在票據表中並在票證註冊表中使用ticketid的外鍵(也是varchar(8))會更容易嗎?
或者在ticketregistrations中不存在ticketid varchar(8)會更容易,將ticket的外鍵保留爲ticketregistrations表的主鍵,並首先檢查ticket表中的ticketid,檢索值,並將其輸入到ticketregistrations內的一行中?
這將在每次插入ticketsregistrations表之前在票據表上創建索引varchar搜索。
我的初始解決方案並不需要這個,因爲參照完整性處理了這個問題。
我很擔心尋找時間。
什麼數據庫系統,以及它的版本? – 2009-09-14 17:01:59