mysql - 想知道如何构建这个用户和服务器 ID 数据库

标签 mysql ruby-on-rails database-design

我正在使用rails 3.1rc4,并且想知道将这些信息构建到数据库中的“rails 方式”是什么。目前我有一个用 devise 生成的用户表。每个用户只有一台对应的服务器,机架空间云服务器会为其分配一个类似于“200123989”的 ID。我想将此服务器 ID 及其创建时间存储在数据库中。服务器信息(例如 ID 和创建日期)是否会与用户表放在单独的表中(用户只能拥有一台服务器)?

如果我创建了一个关系表,我会想到类似“has_one”和“belongs_to”的关系。

简而言之,您会将所有这些都放在用户表中还是创建一个关系表、一个服务器表和一个用户表。这种情况下的最佳做法是什么?

非常感谢!

最佳答案

一般来说,一种方法(不仅仅是我认为的 Ruby 方法)是为服务器准备一张表,为用户准备一张表。由于“user-has-a-server”关系是一对多而不是多对多关系,因此用户表中的字段就足够了:

,-----------.       .-----------.       .----------.
|  Users    |       |  Servers  |       |  Clouds  |
|-----------|       |-----------|       |----------|
| id        |     ,>| id        |     ,>| id       |
| server_id |-----' | cloud_id  |-----' | ...      |
| ...       |       | created   |       '----------'
`-----------'       | ...       |
                    '-----------'

将服务器信息放入 Users 表中将违反第二范式。即,只有用户独有的信息才应放入该表中。另一种说法是,任何无法仅由 Users.id 识别的信息(服务器也不能)都应放入其自己的表中。我认为this page explains relational database normalization以一种非常好的方式。

关于mysql - 想知道如何构建这个用户和服务器 ID 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6604545/

相关文章:

mysql - 显示基于另一个表的表信息

mysql - ActiveRecord 数据库连接的回调?

mysql - 在 mysql 中分离两个相关数据集的最佳实践

sql - 这个数据结构有什么问题?

sql - 如何指定银行帐号的最小和最大数字?

mysql创建新存储过程时出错

mysql - sql中的时差计算

java.lang.NumberFormatException : null java. lang.Integer.parseInt(来源未知)

ruby-on-rails - 渲染部分时出现未定义方法错误

ruby-on-rails - Geocoder - 语言设置为英语,但仍然得到波兰语的一些结果