处理多表关系的更好方法
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
- 现在我不需要使用 tables
的字段值
- 如果我想更改价格。我只改一个地方的价格
- 我正在保存字节数。
- 数据库table 大小较小
但我的问题是
要获取数据,我需要使用 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
语句后面。
假设我有一些 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
- 现在我不需要使用 tables 的字段值
- 如果我想更改价格。我只改一个地方的价格
- 我正在保存字节数。
- 数据库table 大小较小
但我的问题是
要获取数据,我需要使用 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
语句后面。