0

我正在用sql server開發一個MVC項目。其中每個用戶在註冊後將被給予用戶名。使用地址和電子郵件號碼和電話號碼等各種數據完成註冊。我正在使用一個表來存儲地址,它的ID存儲在用戶表中。現在人們可以更改地址,因此我無法理解如何管理它。我想保留舊地址以及新用戶的新地址。任何人都可以幫忙嗎?管理地址的數據庫模式

回答

0

你有一些選擇:

在地址表中,添加用戶ID列。在用戶表中,添加addressid列。

用戶表格會告訴您用戶指示的當前地址。

select * from user u 
inner join address a on u.userid = a.userid and u.addressid = a.addressid 
where userid = 45 

地址表會告訴你用戶使用的所有地址。

select * from address where userid = 45 

優點是用戶表指向您最近的地址表。當用戶添加新地址時,地址表獲取插入並更新用戶表。缺點是在地址表中重複使用用戶名 - 如果父母和子女擁有相同的地址(假設每個用戶都是用戶),則應爲每個用戶多次添加相同的地址。要獲得當前地址,您必須同時詢問用戶和地址表。

在地址表中添加userid列和isPrimary位列。在用戶表中不要添加addressid列

用戶表不會告訴你有關地址的任何信息,但地址表會告訴你用戶使用過的所有地址以及哪個地址是他們的主要地址。

select * from user u 
inner join address a on u.userid = a.userid and a.isPrimary = 1 
where userid = 45 

您可以直接從地址表中獲取給定用戶的當前地址。

select * from address where userid = 45 and isPrimary = 1 

地址表,就像前面的例子一樣,會告訴你用戶使用的所有地址。

好處是地址表負責告訴你這個地址屬於誰,以及它是否是主要的。

將用戶存儲在用戶表中,地址在地址表中。創建交匯點表將地址和用戶放在一起

可以創建具有userid,addressid,isPrimary列的UserAddress表。用戶表只會包含用戶信息。地址表將具有地址並且知道哪個地址屬於哪個用戶,您可以詢問UserAddress表。

select * from user u 
inner join useraddress ua on u.userid = ua.userid and ua.isPrimary = 1 
inner join address a on ua.addressid = a.addressid 
where u.userid = 45 

這樣做的好處是將地址與多個人聯繫起來。同一家庭的父母和兩個孩子可以使用同一個地址。如果家庭移動到另一個位置,則地址表中有一個附加記錄,並且在交接表中有4個記錄。缺點是需要額外加入。

選擇您認爲適合您的情況的用例。