Возможно ли это и если да, я должен идти о делать это таким образом или соединив их на основе того, кто создал вместо символа ?
Возможно, и вы также можете подключить их на основе создателя.
В зависимости от того, что такое данные и чего вы пытаетесь достичь, существует ряд возможностей. Я перечисляю 3 ниже
Возможность 1
Вы можете создать вид и имеет все три соединения. Если у вас есть запись символа, которая указана только в таблице Fandom, то в представлении будут столбцы из таблиц Original и Dungeon равными null.
Это будет выглядеть немного, как это, для одного записи
CharacterView
- Character.id - is not null
- Character.creator - is not null
- Character.field1 - is not null
- Character.fieldN - is not null
- Original.id - is null
- Original.field1 - is null
- Original.fieldN - is null
- Fandom.id - is not null
- Fandom.field1 - is not null
- Fandom.fieldN - is not null
- Dungeon.id - is null
- Dungeon.field1 - is null
- Dungeon.fieldN - is null
Проблема здесь собирается быть, что это будет трудно в базе данных для обеспечения соблюдения ограничений, что делает, что только один из три таблицы ссылаются на любую запись одного символа. Вам нужно будет применить это ограничение в приложении.
Возможность 2
Вы также можете настроить свои таблицы по-разному. Если все три таблицы, которые ссылаются на таблицу символов, имеют одинаковые поля, вы можете просто объединить их в одну таблицу и иметь поле типа, в котором возможны возможные значения (Original, Fandom, Dungeon).
Combined Table
- id
- commonField1
- commonFieldN
- Type (possible choices: Original, Fandom, Dungeon)
Возможность 3
Если эти таблицы не имеют те же точные поля, то можно использовать несколько записей, чтобы сделать одну сущность. Например
TableA
- id
- field1
- field2
- field3
TableB
- id
- field4
- field5
- field6
Вы можете заменить таблицу А и В выше, которые analgous к исходному, фэндома и таблиц Dungeon, с одной таблицей. Ниже
TableC
- id
- entity_id (shared among all the records that make up one entity)
- char_id
- field_name (possible values field1, field2, ..., field6)
- value
В любом случае, детали создателя как имя, и т.д., должны быть в их собственной таблице со ссылкой на всех других таблиц. Эти данные не должны повторяться во всех таблицах, как в настоящее время.
Хотя вы уже приняли ответ (хотя мне было бы интересно узнать, какой из вариантов вы выбрали и почему), я думаю, вы должны серьезно подумать об использовании ['Находится на табличном наследовании'] (http: //docs.sqlalchemy. org/en/latest/orm/inheritance.html # join-table-inheritance) для этого варианта использования. – van
Спасибо за ваш комментарий. Я не знал об этом ярлыке * Вводил наследование таблицы *. Согласитесь ли вы, что это может быть выполнено с возможностью 2 в моем ответе? – saq7
Я думал о том, чтобы попробовать возможность 3, но я также посмотрю на Наставку для набранных таблиц! Спасибо. – geminateCoder