In Qlik Sense association is automatically created if any two tables have same field name, so its not just restricted to IDs or key fields but you need to ensure that two tables are connected through single field and there must not be a loop created while associating tables. Sometimes two fields can be used for association but its suggested to avoid as far as possible.
Loop can be understood as A->B->C->A, Here C connected to A via B and also C directly connected to A, this kind of looping is not allowed in Qlik data model to keep data association and selections unambiguous.
Please try to maintain a simple data model not the complex one. Analyse your data & drop unnecessary fields & try to join tables if their is some scope. Avoid loops in your data model. You can use link tables.