用于管理地址的数据库模式

时间:2017-06-10 04:10:58

标签: sql-server database-design asp.net-mvc-5 foreign-key-relationship

我正在用sql server开发一个MVC项目。注册后,每个用户都将获得一个用户名。使用地址,电子邮件号码和电话号码等各种数据进行注册。我使用表来存储地址,其id存储在users表中。现在,由于人们可以拥有更改地址,因此我无法理解如何管理它。我想保留旧地址以及新用户的新地址。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

你有一些选择:

在地址表中,添加userid列。在用户表中,添加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 - 如果父母和子女具有相同的地址(假设每个人都是用户),则您将为每个用户多次添加相同的地址。要获取当前地址,您必须同时询问用户和地址表。

在地址表中,添加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

这样做的好处是将地址与多个人联系起来。居住在同一家庭的父母和2个孩子可以与同一地址相关联。如果家庭搬到另一个地方,你在地址表中有一个额外的记录,在联结表中有4个记录。缺点是额外加入。

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