我正在用sql server开发一个MVC项目。其中每个用户在注册后将被给予用户名。使用地址和电子邮件号码和电话号码等各种数据完成注册。我正在使用一个表来存储地址,它的ID存储在用户表中。现在人们可以更改地址,因此我无法理解如何管理它。我想保留旧地址以及新用户的新地址。任何人都可以帮忙吗?管理地址的数据库模式
0
A
回答
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个记录。缺点是需要额外加入。
选择您认为适合您的情况的用例。
相关问题
- 1. 支持IPv6格式的数据库服务器地址的数据库管理工具
- 2. Node.js //管理sqlite数据库的模块
- 3. 流星本地与管理数据库
- 4. 管理结构的地址
- 5. 数据库管理
- 6. 如何管理对生产数据库的模式升级?
- 7. 管理内存中数据库关系的模式
- 8. 管理每周时间表的数据库模式
- 9. 在Docker中管理数据库模式的“正确”方法
- 10. 源代码管理中的存储过程/数据库模式
- 11. 用于高效考勤管理系统的数据库模式
- 12. 开始使用内容管理系统的数据库模式
- 13. 如何从简单的docker管理多个数据库模式?
- 14. Laravel的一种医院管理数据库模式
- 15. 数据库管理库
- 16. 模型代理数据库模式
- 17. 数据库模式:用户团队管理
- 18. Lib从数据库模式构建管理页面?
- 19. 地理定位/地理空间测试的有效地址列表/数据库
- 20. 保护模式和物理地址
- 21. 从数据库集成url地址到django url模式的最佳方式
- 22. 如何管理数据保存速度本地数据库
- 23. 管理mysql数据库
- 24. MYSQL数据库管理
- 25. 管理Wordpress数据库(Adminer)
- 26. 管理多个数据库
- 27. IPTC数据管理库
- 28. 数据库和表管理
- 29. 管理许多数据库
- 30. 管理数据库连接