Создайте таблицу, которая знает обо всех аргументах (PK и FK обозначают первичные и внешние ключи):
vote { vote_id PK, vote, user_id, timestamp, arg_id FK(arg.arg_id) }
arg { arg_id PK }
photo { photo_id PK FK(arg.arg_id), photo_file, photo_name, ... }
house { house_id PK FK(arg.arg_id), house_name, ... }
Обратите внимание, что photo_id
и house_id
на самом деле arg_id
с.Единственное потенциальное несоответствие состоит в том, что один аргумент может быть как фотографией, так и домом, поэтому бизнес-уровень должен быть уверен, что этого никогда не произойдет.
Теперь я немного запутался во второй половиневопроса.Тип аргумента указывает на то, что это фотография или дом, верно?Если так, аргумент_тип = 3 предполагает, что house_name_suggestion - это просто еще одна вещь, за которую вы можете проголосовать.Это, конечно, тесно связано с домашним столом, но с точки зрения голосования я бы сказал, что это не имеет значения.Если это так, то вы просто добавляете новую смесь в смесь:
house_name_suggestion { house_name_suggestion_id PK FK(arg.arg_id),
house_id FK(arg.arg_id), new_house_name, old_house_name, ... }
Обратите внимание, однако, что я добавил столбец house_id.Хотя я не уверен на 100%, я думаю, что вы использовали столбец id для удвоения в качестве первичного ключа и в качестве ссылки на таблицу домов, что означало бы, что в каждом доме может быть только одно предложение по названию дома.
Примечание: у вас в именах таблиц есть смесь существительных во множественном и единственном числе.Я настоятельно рекомендую придерживаться единственного числа.Кроме того, префикс table_
добавляет очень мало значения, и с ним трудно работать.Не беспокойся об этом.