Я хотел бы создать общую таблицу в 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
, но не работал. Что я делаю неправильно? Не могли бы вы указать мне правильное направление? Спасибо.
Как сказал @Jorge, ваша таблица Repairs
должна быть привязана к базовому Cars
(или Vehicles
средству), в котором хранятся как спортивные автомобили, так и танки. Что-то вроде Vehicles(vehicle_id, vehicle_type, other_atts)
.
В зависимости от того, какую информацию вы храните в баках и спортивных автомобилях, вы можете при необходимости создавать специализированные таблицы. Представление наследования в SQL является сложной темой, но может быть сделано несколькими способами. Например, см. Как вы можете представить наследование в базе данных? ,
car (id, type_id, someAttr); sportscar (id_fk_toCar, otherAttr); hothatch (id_fk_toCar, otherAttr); repair( id, id_fk_to_car, otherAttr)