我正在使用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/