数据库设计 - 我应该使用一对一的关系吗?

时间:2016-05-18 22:31:26

标签: php mysql

我正在设计一个存储产品(存储,cpus,mobos,内存等......)的数据库以及有关产品的信息 (规格,销售特定产品的零售商和价格)

我应该使用part_number和产品(主板,内存等......)表的一对一关系吗?或者我应该将每个part_number存储在自己的产品表中,并将price和products表与part_number一起存储?

Er图

http://prntscr.com/b5ovuj

Cpu table

=========================================
Id |part_number_id | Specifications ....
=========================================
1  |          1    |
2  |          2    |
3  |          3    |
4  |          4    |
=========================================

Mobo table
=========================================
Id   |part_number_id| Specifications ....
=========================================
101  |      101     |
102  |      102     |
103  |      103     |
104  |      104     |
=========================================

Memory table
=========================================
Id   |part_number_id | Specifications ....
=========================================
201  |      501      |
202  |      502      |
203  |      503      |
204  |      504      |
=========================================



Retailers
=========================================
Id |      name     |  Logo
=========================================
1  |     Pcparts   |  pcparts.png
2  |     bestpc    |  bestpc.png
3  |      LMNC     |  lmnc.png
4  |      GGWP     |  ggwp.png
=========================================


part_numbers 
=======================
Id |    part_number
=======================
1  |   BX80646I74790K
2  ||BX80646I54690K
3  |BX80648I75820K
4  |FD8350FRHKBOX
5  |FD6300WMHKBOX
6  |BX80646G3258
7  |BX80646I54590
8  |BX80646I34160
101|FD8320FRHKBOX
102|BX80646I54460
103|BX80648I75930K
201|BX80646I54690
202|FD9590FHHKWOF
203|AD740KYBJABOX
======================



Price
==============================================================================
Id | part_number_id |  retailer_id |         product_url           |  Price
==============================================================================
1  |        1       |       1      |http://www.example.com/prod/id |  122.33
2  |        1       |       2      |http://www.example.com/prod/id |  133.41
3  |        1       |       3      |http://www.example.com/prod/id |  110.00
4  |        1       |       4      |http://www.example.com/prod/id |  105.05
5  |       101      |       1      |http://www.example.com/prod/id |  122.33
6  |       201      |       2      |http://www.example.com/prod/id |  133.41
7  |       101      |       3      |http://www.example.com/prod/id |  110.00
8  |       101      |       4      |http://www.example.com/prod/id |  288,19
9  |       201      |       1      |http://www.example.com/prod/id |  244,19
10 |       204      |       2      |http://www.example.com/prod/id |  277.09
==============================================================================

2 个答案:

答案 0 :(得分:1)

如果您认为并假设此表中的部件号为part_numbers,请使用一个表unique。如果此表中的部件号是唯一的,那么您不会通过引入另外3个表来减少冗余。

您可以在field/attribute中再添加一个part_number作为type,您可以在其中指定:CPU,内存或Mobo。

答案 1 :(得分:0)

在这种情况下,我通常将所有类型的产品中的公共字段存储在一个名称为" Products"有这样的常见字段:

ID,Title,Partnumber,...

并将Products表中的主键用作Mobo,Memory等其他表中的外键