MySQL общая таблица для разных типов

0

Я хотел бы создать общую таблицу в mysql (например, repair) для двух разных таблиц (например, sportscar и tank). Оба должны быть отремонтированы, и здесь возникает моя проблема. У меня не может быть только id (PK) двух столов sportscar и tank в repair стола, потому что я не могу выбрать для ID 1, если он из sportscar или из tank. Поэтому я добавил type_id также в repair таблицы. Так что vehicle_id = 1 и type_id = 2 должны определить, что это из tank, а идентификатор транспортного средства - 1. До сих пор так хорошо, но, к сожалению, он не работает. Я понятия не имею, почему, но это, кажется, не принимать как - то vehicle_id и type_id в качестве составного ключа. В SqlYog мне не разрешено выбирать соответствующую запись, потому что она всегда пуста в связанных таблицах. Я пробовал много разных комбинаций, даже чтобы установить id и type_id как составной PK в таблицы sportscar и tank, но не работал. Что я делаю неправильно? Не могли бы вы указать мне правильное направление? Спасибо. Изображение 174551

Изображение 174551

Изображение 174551

Изображение 174551

Изображение 174551

  • 0
    Ремонтный стол должен иметь FK от CAR, а не специализированные столы. И у специализированных таблиц также должен быть FK к CAR, так как отношение 1 к 1 от автомобиля к специализированному, автомобильный реестр также является специализированным. Вы можете сохранить таблицу типов, хотя в этом нет необходимости.
  • 0
    car (id, type_id, someAttr); sportscar (id_fk_toCar, otherAttr); hothatch (id_fk_toCar, otherAttr); repair( id, id_fk_to_car, otherAttr)
Показать ещё 19 комментариев
Теги:
composite-key

1 ответ

0
Лучший ответ

Как сказал @Jorge, ваша таблица Repairs должна быть привязана к базовому Cars (или Vehicles средству), в котором хранятся как спортивные автомобили, так и танки. Что-то вроде Vehicles(vehicle_id, vehicle_type, other_atts).

В зависимости от того, какую информацию вы храните в баках и спортивных автомобилях, вы можете при необходимости создавать специализированные таблицы. Представление наследования в SQL является сложной темой, но может быть сделано несколькими способами. Например, см. Как вы можете представить наследование в базе данных? ,

  • 0
    так что мне нужна главная общая базовая таблица в любом случае, верно? Наследование таблиц классов (или Table Inheritance) - вот что мне нужно. Выглядит неплохо. Я думаю, что я получил картину сейчас. Вот почему @jorgecampos сказал, что будут отношения 1: 1?
  • 0
    Да, именно так. PK в обеих специализированных таблицах также является FK для родительской таблицы, что делает соотношение 1: 1.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню