2015-08-30 6 views
0

Я создаю приложение Laravel, которое имеет «списки». Эти списки могут быть такими, как лодки, самолеты и автомобили; каждый со своими конкретными полями.Архитектура базы данных: множественные отношения типов

У меня также будет таблица изображений, которая должна относиться к каждому типу листинга и таблице пользователей, которая должна отображаться для каждого типа листинга. Я пытаюсь определить лучший способ сопоставить каждый тип листинга с images и users.

Один из способов я думал, что делать это было иметь отдельную boats, planes и automobiles таблицу с их конкретными полями, а затем с конкретным boat_imagesplane_images и automobile_images таблицей для сопоставления каждого соответствующего типа. Но тогда отношение каждого типа к пользователю было бы немного сложнее.

Я не думаю, что одна гигантская таблица листинга со всеми полями, которые я когда-либо использовал через эти 3 (которые могли бы вырасти в дальнейшем), будет иметь смысл --- и я также не считаю, что у меня есть общее поле метаданных который имеет объект JSON, полный спецификаций для каждого списка, будет хорошо работать, когда я хочу иметь базу данных, доступную для поиска.

Я знаю pivot tables, но я пытаюсь понять общую архитектуру здесь. Любая помощь будет принята с благодарностью. Благодаря!

+1

Вам не нужно разделять таблицу изображений. Таблица изображений может быть одной таблицей, которая может хранить изображения ваших лодок, самолетов и автомобилей. Laravel может справиться с этим. См. Http://laravel.com/docs/5.0/eloquent#polymorphic-relations, чтобы увидеть пример кода и идеи. – MaXi32

ответ

2

У вас может быть стол listings, содержащий только id и name. Лодки, самолеты, автомобили и другие должны быть подмножеством.

Каждая таблица будет иметь свою собственную сущность. И объект Listing будет иметь несколько связей hasMany со своими подмножествами. Эти отношения будут называться как boats(), planes() и т. Д. Каждое подразделение листинга подмножества будет содержать одно отношение belongsTo.

Использование этих таблиц подмножеств также должно помочь разделить валидацию формы.

У вас может быть одна таблица images и используйте полиморфные отношения в отношении таблицы списков. Это огромный спаситель.

+0

Большое спасибо за советы! Итак, что касается 'name', вы имеете в виду имя таблицы подмножества или просто общее название, которое можно было бы использовать для идентификации элемента? В этом случае у меня, вероятно, не будет названия, так как оно будет автоматически генерироваться по выбранной информации о транспортном средстве. Еще раз спасибо! – Zach

+0

Я имел в виду общий заголовок. Вы можете пойти еще дальше, используя полиморфные отношения для обработки лодок, самолетов, автомобилей и т. Д. – user2094178