Путаница в макете модели размещения базы данных - PullRequest
1 голос
/ 21 апреля 2010

Я не специалист по базам данных и новичок в Rails, так что здесь идет кое-что, что меня немного смущает ...

Предположим, у меня есть три класса в качестве образца (обратите внимание, что не было предпринято никаких усилий для решения любой возможной проблемы зарезервированных слов Rails в образце).

class File < ActiveRecord::Base
  has_many :records, :dependent => :destroy
  accepts_nested_attributes_for :records, :allow_destroy => true
end

class Record < ActiveRecord::Base
  belongs_to :file
  has_many :users, :dependent => :destroy
  accepts_nested_attributes_for :users, :allow_destroy => true
end

class User < ActiveRecord::Base
   belongs_to :record
end

После ввода записей содержимое базы данных будет отображаться как таковое. Моя проблема заключается в том, что если для одной и той же записи существует много файлов, в ней будут повторяться имена записей. Это также будет верно, если в таблице Users будет несколько записей для одного и того же пользователя.

Мне было интересно, есть ли лучший способ, чтобы один или несколько файлов указывали на одну запись, а одна или несколько записей указывали бы на одного пользователя. Кстати, имена файлов являются уникальными.

Таблица файлов:

id   name    
1   name1       
2   name2    
3   name3  
4   name4  

Таблица рекордов:

id   file_id record_name  record_type
1   1       ForDaisy1    ...    
2   2       ForDonald1   ...
3   3       ForDonald2   ...
4   4       ForDaisy1    ...    

Таблица пользователей:

id  record_id  username  
1   1           Daisy    
2   2           Donald    
3   3           Donald
4   4           Daisy

Есть ли способ оптимизировать базу данных, чтобы предотвратить дублирование записей, или это должно действительно правильное и правильное поведение. Я распределил базу данных по разным таблицам, чтобы в будущем можно было легко добавлять новые столбцы.

1 Ответ

1 голос
/ 21 апреля 2010

Мне кажется, что вы неправильно поняли, что означает has_many и assign_to У пользователя много записей, а в записи много файлов. Пользователь не принадлежит к записи, это не имеет смысла. Так что переверните свои отношения, и я думаю, вы получите то, что хотите.

Вы получите:

(File, id, record_id, name)
(Record, id, user_id, name, ...)
(User, name, ...)

class File < ActiveRecord::Base
  belongs_to :record
end

class Record < ActiveRecord::Base
  belongs_to :user
  has_many :files
end

class User < ActiveRecord::Base
   has_many :records
   has_many :files, :through => :records
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...