В двух словах задача: придумать структуру БД для многоязычного каталога алкогольной продукции
Посидев немного и пораскинув мозжечком получается что-то вроде этого:
Код | CREATE TABLE `languages` ( `id` int(11) NOT NULL auto_increment, `shortname` varchar(255) default NULL, `fullname` varchar(255) default NULL, PRIMARY KEY (`id`) )
CREATE TABLE `countries` ( `id` int(11) NOT NULL auto_increment, `country_id` int(11) default NULL, // идентифицирует страну `language_id` int(11) default NULL, // определяет язык (таблица languages) информативных полей (name, shortname) `name` varchar(255) default NULL, `shortname` varchar(255) default NULL, PRIMARY KEY (`id`) )
CREATE TABLE `tastes` ( `id` int(11) NOT NULL auto_increment, `taste_id` int(11) default NULL, // идентифицирует вкус `language_id` int(11) default NULL, // идентифицирует язык `description` varchar(255) default NULL, // поле с информцией PRIMARY KEY (`id`) ) CREATE TABLE `wines` ( `id` int(11) NOT NULL auto_increment, // записи здесь уникальные `country_id` int(11) default NULL, // внешний ключ, поле `country_id` в таблице countries (не `id`) `colour` int(11) default NULL, `degree` decimal(2,2) default NULL, `year` int(11) default NULL, `taste_id` int(11) default NULL, // внешний ключ, поле `taste_id` в таблице tastes `price` decimal(6,2) default NULL, `image` blob, PRIMARY KEY (`id`) )
|
Я с рельсами только знакомлюсь и пока не нахожу возможности задать отношение belongs_to :taste или :country в модели Wine. Связывание должно по идее происходить так: wines.id_taste = tastes.id_taste AND language_id = 1. Т.е. запись идентифицируется по 2 ключам Реализовать это в рельсах, я так понял, трудновато. Как адаптировать структуру под рельсы? Вариант типа разделить tastes на 2 таблицы (1ая: `id`, 2ая, `taste_id`, `language_id`, `description`) возможно бы и прокатил, но городить лишнюю таблицу ради одного поля как-то не хочется |