在许多关系数据库设计中,有些字段会在其他表中引用。
例如,考虑具有唯一用户名的用户表和存储地址数据的第二个表。
一种可能的布局,我会说是常见的方法,因为我在大多数软件中观察到,是使用这样的自动增量 id:
Table users
===========
userId int primary auto_increment
userName varchar unique
Table adressdata
==========
userId int references users.userId
adress_type varchar // for example country
address_value varchar // for example US
(you probably also want to put a unique key on (userId,adress_type))
Run Code Online (Sandbox Code Playgroud)
这就是我过去常常这样做的方式,也是我在大多数情况下看到的方式。
另一种方法是:
Table users
===========
userName varchar primary
Table adressdata
==========
userName varchar references users.userName
adress_type varchar // for example country
address_value varchar // for example US
(you probably also want to put a unique key on (userName,adress_type))
Run Code Online (Sandbox Code Playgroud)
这里我们也将完整的用户名存储在地址数据表中。
对我来说,这有以下优点:
您可以立即从表中选择用户名,而无需将其加入另一个表。在此示例中,这从应用程序的角度来看可能不太相关,但这只是一个示例。
在 master-master 复制环境中扩展数据库可能更容易,因为不存在 auto_increment 冲突。
但也有缺点:
在我看来,使用文本字段更容易并且不使用增量 id,并且权衡是最小的,并且在大多数应用程序中不相关。
当然,某些对象根据其性质用递增的数字标识(例如,论坛帖子应该接收递增的 id,因为可能没有其他唯一字段,如标题等)。
但是在我开始以完全不同的方式设计我的数据库布局之前,我想知道是否有我没有想到的事情。
有没有最佳实践?
是否有我没有想到的利弊,以及可能会在以后出现的影响?
您个人如何设计关于上述几点的数据库,为什么?
归档时间: |
|
查看次数: |
186 次 |
最近记录: |