处理多表关系的更好方法

better way to handle multiple tables relationship

假设我有一些 table 像...
国家

id name  
1  Cyprus  
2  India   

id name country_id   
1   a     1   
2   b     2   
3   c     2  

城市

id name state_id   
1   x     1     
2   y     2  
3   z     3  
4   p     2    

页数

id name  slug    status   
1   ab   a-b       1      
2   pq   p-q       0   
3   abc  a-b-c     1     

mode_of_training

id  name 
1   Virtual
2   Classroom

id name description 
1   a   something   
2   b   something

价格

id price currency_code 
1   200   USD
2   300   AUD
3   4000  INR

优惠

id name   discount
1  xyz-1   20%
2  abc-2   30%
3  pqr-3   10%

以这种方式创建 table 结构是正确的吗??这样我就可以重用它们 使用那里的 ID。

例如

items_relation_table

id country_id state_id  city_id  page_id item_id price_id offer_id  status
1   0           0         0       1        1       1         0        1
2   0           0         0       1        1       1         1        0
3   1           0         1       2        2       1         2        1
4   1           0         1       3        3       2         1        1 

但我的问题是 要获取数据,我需要使用 Joins
或者创建视图更好
或者有更好的方法来创建table结构

您的实体-table乍一看还不错。但是我不明白你的关系table。看起来您试图将所有内容与所有内容联系起来,这在某些情况下可能没有意义(报价真的属于国家吗?)在某些情况下它似乎是多余的:当页面被 linked 到(许多)城市,没必要link国家也一样,因为国家是由城市决定的。

您应该只在那些真正需要处于直接多对多关系中的实体之间添加关系-table。对于这些关系中的每一个,您都需要一个单独的 table.

例如对于页面和城市之间的关系:

cities(id, name, state_id) <--> cities_pages(city_id, page_id) <--> pages(id, name, slug, status)

是的,您必须加入 table 才能获取数据。这是关系数据库背后的基本思想之一。不要害怕连接,如果你的 tables 被正确索引那根本不是一个昂贵的操作(假设性能是你关心的)。当然,如果这对您的应用程序有意义,您可以添加一些视图,但这将包含相同的 JOINS,您只是将它们抽象在 CREATE VIEW 语句后面。