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个记录。缺点是需要额外加入。

选择您认为适合您的情况的用例。