Я смущен относительно того, как работает связь с базой данных.Ruby Sinatra Datamapper/путаница базы данных
Скажем, у меня есть пересечение границы («пересечение»), которое имеет два направления («север», «юг»), каждое из которых имеет два типа полос («нормальный», «быстрый») каждая из которых имеет 2 метрики (= данные) («delay», «queue_length»).
На самом деле существует несколько переходов, с большим количеством типов дорожек и более метрик.
Как я должен хранить это в базе данных? Раньше я использовал базы данных, но никогда не добавлял таблицы или один-ко-многим или что-то в этом роде.
Я наткнулся на Datamapper, и так как я учусь, как нам Синатра, я думал, что отдам это. В учебнике (http://datamapper.org/getting-started.html) часть «один ко многим» просто закричала «это то, что вам нужно», поэтому я начал возиться.
require 'data_mapper'
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/development.db")
class Crossing
include DataMapper::Resource
property :id, Serial
property :name, String,:unique=>true
has n, :directions
end
class Direction
include DataMapper::Resource
property :id, Serial
property :direction, String,:unique=>true
belongs_to :crossing
has n, :lanes
end
class Lane
include DataMapper::Resource
property :id, Serial
property :lane, String
belongs_to :direction
has n, :datas
end
class Data
include DataMapper::Resource
property :id, Serial
property :name, String,:unique=>true
property :value, String
belongs_to :lane
end
DataMapper.finalize.auto_migrate!
Я просто подумал, что это выглядело так элегантно говоря: «пересечение имеет п направления, направление имеет п полосы, и т.д.»
Тогда:
Crossing.create(:name => "crossing")
Direction.create(:direction => "north")
Direction.create(:direction => "south")
Lane.create(:lane => 'normal')
Lane.create(:lane => 'fast')
Data.create(:data => 'delay')
Data.create(:data => 'queue_length')
// now how do I retrieve find the data of a lane of a direction of a crossing?
Теперь, что я буду ввод и извлечения все время является частью данных. Все это имеет смысл, или я просто не понимаю, для каких табличных ассоциаций? Я знаю, что вместо этого у меня может быть гигантский объект, но я уверен, что это странный способ делать что-то.
@crossing = {
'crossing name' => {
:directions => {
:north => {
:normal => {
:delay => '10 min',
:queue => '100 m'
},
:fast => {
:delay => '1 min',
:queue => '10 m'
}
},
etc etc etc
}
, а затем получить доступ к данным, как @crossing [: север] [: нормальный] [: задержка] .... но я вроде чувствую, как база данных будет лучше?
Имею ли я какой-либо смысл? У кого-нибудь есть несколько указателей на молодого кузнечика?
Это прохладный путь! Было всего несколько обручей (я не могу использовать Data, потому что «Есть встроенный тип с именем Data») Большое вам спасибо! – cannotcompute
Да, извините, не испытал вообще. – Amadan