Я программирую веб-сайт, который позволяет пользователям размещать объявления с подробными полями для различных типов товаров, которые они продают. Однако у меня есть вопрос о лучшей схеме базы данных.
На сайте представлено много категорий (например, автомобили, компьютеры, камеры), и у каждой категории объявлений есть свои поля. Например, у автомобилей есть такие атрибуты, как количество дверей, марка, модель и мощность, в то время как у компьютеров есть такие атрибуты, как ЦП, ОЗУ, модель материнской платы и т. Д.
Теперь, поскольку все они являются списками, я думал о полиморфном подходе, создавая родительскую таблицу LISTINGS и другую дочернюю таблицу для каждой из различных категорий (COMPUTERS, CARS, CAMERAS). Каждая дочерняя таблица будет иметь list_id, который будет ссылаться на таблицу LISTINGS. Таким образом, при получении списка он получит строку из списка LISTINGS, к которой присоединена связанная строка в связанной дочерней таблице.
LISTINGS
-listing_id
-user_id
-email_address
-date_created
-description
CARS
-car_id
-listing_id
-make
-model
-num_doors
-horsepower
COMPUTERS
-computer_id
-listing_id
-cpu
-ram
-motherboard_model
Теперь, эта схема - хороший шаблон проектирования или есть лучшие способы сделать это?
Я рассмотрел одиночное наследование, но быстро отмахнулся от мысли, потому что таблица станет слишком большой слишком быстро, но потом возникла другая дилемма - если пользователь выполняет глобальный поиск по всем спискам, то это означает, что мне придется запросить каждую дочернюю таблицу отдельно. Что произойдет, если у меня будет более 100 различных категорий, не будет ли это неэффективным?
Я также подумал о другом подходе, где есть главная таблица (мета-таблица), которая определяет поля в каждой категории, и таблица полей, в которой хранятся значения полей каждого списка, но будет ли это противоречить нормализации базы данных?
Как бы сайты, подобные Киджиджи, делали это?