Я предложил два подхода к одной и той же идее и хотел бы избежать каких-либо очевидных ловушек, используя один над другим.У меня есть таблица (tbl_post), где одна строка может иметь много связей с другими таблицами (tbl_category, tbl_site, tbl_team).У меня есть таблица отношений, чтобы присоединиться к ним, но я не знаю, какую структуру использовать, условную или прямую?Надеюсь, что следующее объяснит ...
tbl_post (simple post, can be associated with many categories, teams and sites)
* id
* title
* content
tbl_category
* id
* title
* other category only columns
tbl_team
* id
* title
* other team only columns
tbl_site
* id
* title
* other site only columns
----------------------------------------------------------
tbl_post_relationship
* id (pk)
* post_id (fk tbl_post)
* related_id (fk, dependant on related_type to either tbl_category, tbl_site or tbl_team)
* related_type (category, site or team)
____________________________________
|id|post_id|related_id|related_type|
|--|-------|----------|------------|
| 1| 1| 6| category|
| 2| 1| 4| site|
| 3| 1| 9| category|
| 4| 1| 3| team|
------------------------------------
SELECT c.*
FROM tbl_category c
JOIN tbl_relationship r ON
r.post_id = 1
AND r.related_type = 'category'
AND c.id = r.related_id
------------- OR ---------------
tbl_post_relationship
* id (pk)
* post_id (fk tbl_post)
* category_id (fk tbl_category)
* site_id (fk tbl_site)
* team_id (fk tbl_team)
________________________________________
|id|post_id|category_id|site_id|team_id|
|--|-------|-----------|-------|-------|
| 1| 1| 6| NULL| NULL|
| 2| 1| NULL| 4| NULL|
| 3| 1| 9| NULL| NULL|
| 4| 1| NULL| NULL| 3|
----------------------------------------
SELECT c.*
FROM tbl_category c
JOIN tbl_relationship r ON
r.post_id = 1
AND r.category_id = c.id
Итак, при одном подходе я получу множество столбцов (может быть, больше таблиц) с NULL.Или я получаю одну простую таблицу для ее обслуживания, но каждое соединение основано на «типе».Я также знаю, что у меня может быть таблица для каждого отношения, но опять же кажется, что слишком много таблиц.Есть идеи / мысли?