正确的数据模型的结构?(我的第1轨程序)
-
22-07-2019 - |
题
我要建设我的第一个红宝石在轨道上应用程序(及第一任何东西超越xhtml和css),而我正在寻找一些有用的反馈意见上我的模型的结构。
唯一的型号我相信我需要迄今为止是:
1.一个 电影 模型 (作为主要的模型,命名为电影这样的网址将会看起来像"sitename.com/movies/1-Willy-Wonka") 和
2.一个 用户 模型
除了那些,我不知道该怎么做的其他人;像'拍摄地点','行动者',以及最重要的是,attributes like'威利旺卡"和"约翰尼*德普'.
我应该让所有的这些模型,甚至属性?如果是这样,它是可能的,并建议,为让人们建立模型的属性?
我试试看到的应用程序,因为创建的数据的形式和存储在数据库,并与pov我不能决定如何连接性(字 <=>演员)节(行动者,拍摄地点、艺术品等)。 内部电影的清单;同时允许自己的属性,可链接相关的属性/电影/甚至部分:点击'史蒂芬speilberg'将会带给你一页的电影,他的行为、薄膜他的指示,产生的,编写,等等。
想法?
解决方案
我会推荐你的数据模型清楚的第一次。然后你可以启动一个轨道模型每个数据库表。这是不是总是这种情况,但它是一个合理的地方开始。
让我们重点关注电影和行动者:
一些假设:
- 电影可以有许多对多关系到其他实体
- 你想要保存的文字信息的一部分之间的关系是一个演员和一个电影
你可能会模型之间的关系这样的:
# movies.rb
class Movie < ActiveRecord::Base
has_many :roles
has_many :actors, :through => :roles
end
# actor.rb
class Actor < ActiveRecord::Base
has_many :roles
has_many :movies, :through => :roles
end
通常情况下,你可以依靠轨道的魔法来处理加入模型,而不创建一个自己。在这种情况下,我们要存储的文字信息为属性的参加模式,因此,我们创建它明确。
# role.rb
class Role < ActiveRecord::Base
belongs_to :movie
belongs_to :actor
end
其他提示
开始配车型的电影,演员,FilmLocation和字符。电影和演员有很多一对多的关系(电影有很多演员,演员曾在多部电影)。 FileLocation和电影也有不少一对多。字符(威利旺卡)和演员许多一对多以及
如果这是你的第一个东西只要Web开发那么我建议你先写一个简单的Web应用程序,只列出了电影,并允许添加,编辑和删除它们。只要存储标题,摘要以及电影海报/ DVD封面的可能的URL。然后在加入演员,并将它们与电影相关联的工作。
创建“IMDB状”网站是不是一个简单的项目。你将有很多复杂的关系不仅仅是关联与电影演员。演员在电影的角色。你可能想要得到甚至比这更抽象的,说一个人有工作在电影这将让你也跟踪的东西,如导演,制片人,键握持,铸造董事。
不仅要你在数据模型的工作,但你希望自己的网站包括什么在计划工作,什么样的顺序,你应该建立在这些功能(根据需要),并采取小步骤去那最后目标
进一步阐述。上面列出的机型的迁移可能是这样的:
class CreateMovies < ActiveRecord::Migration
def self.up
create_table 'movies' do |t|
t.string 'title', :null => false
t.timestamps
end
end
def self.down
drop_table 'movies'
end
end
class CreateActors < ActiveRecord::Migration
def self.up
create_table 'actors' do |t|
t.string 'first_name', 'last_name', :null => false
t.timestamps
end
end
def self.down
drop_table 'actors'
end
end
下面对应的movie_id
和actor_id
字段在上述角色模型的belongs_to
协会和是外键,允许角色表加入演员和电影。正如我已经提出了造型吧,character_name
是这种关系的性质,因此是角色的属性。这是你的电话是否允许在character_name NULL。我是持怀疑态度的NULL,但在这种情况下,我已经允许它作为一个可以使论点,即在实践中你经常要存储的事实,演员是在给定的电影,但不知道或关心的字符名。
class CreateRoles < ActiveRecord::Migration
def self.up
create_table 'roles' do |t|
t.integer 'movie_id', 'actor_id', :null => false
t.string 'character_name'
t.timestamps
end
end
def self.down
drop_table 'roles'
end
end
这可能是值得的数据库标准化阅读了: http://en.wikipedia.org/维基/ Database_normalization
在一般情况下,是的。我喜欢我的模式,以尽可能精细。这使得事情更加清楚的人谁不熟悉的应用程序,使得它更容易重用代码。
这是有帮助的编写复杂的应用程序之前 ActiveRecord关联的牢牢把握。确保你知道所有心脏协会和他们实际的SQL表方面产生的。有时,它看起来像魔术,而魔术不一定是好事。如果你知道什么是它背后的东西落在到位。
此外,不要害怕放弃一切,重新开始,而实验。这是红宝石,所以它不会需要很长时间,回到原来的位置。