将多个数据表存储在单个数据库表中

时间:2014-02-17 17:16:42

标签: mysql sql database orm relational-database

设计MySql数据库,用于存储多种产品,如电脑,手机,笔式驱动器......等等。每种产品都有不同的功能,如

**Computers has**
Processor
Ram
HDD
Monitor Size
....etc

**Mobile phone has**
Display Size
Network type
OS
Internal Memory
....etc

**Pendrive has** 
Capacity
USB Version
....etc

我必须存储无限数量的产品,而不是为每个产品创建单独的表如何创建数据库结构以将这些信息存储在一个或固定数量的表(数据表+映射表)上。(我认为Wordpress存储这种格式的数据,它使用很少的表,并存储与这些表中的帖子/类别相关的任何数字字段。。任何帮助/想法来解决这个问题将不胜感激。

3 个答案:

答案 0 :(得分:1)

考虑一下 创建三个表产品,功能,product_feature和product_photos

产品数据库

pid, p_name, p_description, p_price, ...
insert query 
INSERT INTO (p_name, p_description, p_price, ....) VALUES(?,?,?,...)

功能表

fid, f_name, f_description, ...
insert query 
INSERT INTO (F_name, F_description, ....) VALUES(?,?,?,...)

现在product_feature表将是

id, pid, fid 
query for one product
// say a product Id is 1
INSERT INTO (pid, fid) VALUES(1, 10) 
INSERT INTO (pid, fid) VALUES(1, 15
INSERT INTO (pid, fid) VALUES(1, 30) 

其中pid和fid是具有关系的外键,phpmyadmin可以为你做到这一点 然后,您可以添加具有多个功能的产品

然后可能是照片表

foto_id, photo_name, photo_path ....

对所有表使用InnoDB

如果您需要进一步的帮助,请告诉我

答案 1 :(得分:0)

您需要设计一个表格,使其涵盖所有产品的所有属性。这有助于您将任何类型的产品插入到该表中。但是,请记住,如果有4个产品具有10个不同的属性,您最终会创建40个列,并且可能只使用10个来随时插入数据。

答案 2 :(得分:0)

您可以选择一些ORM使用的方法,如hibernate或doctrine

https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/inheritance.html

http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html

您的选择取决于您的数据以及您将如何使用它。

如果您永远不会同时获得包含不同类型设备的列表,则应使用不同的表格。

如果你计划所有“设备”应该共享一些字段,如“ref”,“name”,“description”,“price”,“weight”等,你应该使用一个表,因为我需要一个简单的列表设备类型简单,成本低,但如果您计划添加更多类型的设备和属性,表格可能会增长。

如果您计划此字段会增加表格,那么您应该在不同的表格中拆分每种类型设备的具体属性,并在设备表格中使用允许您进行连接的鉴别器字段。

如果设备的属性会增长很多(或动态),那么您应该考虑使用包含字段:属性和值的表。在这种情况下,查询会更加沉重。

所以基本上你可以这样做:

计算机>

mobile->

pendribe->

或:

设备 - >类型,价格,名称,处理器,内存,内存,容量,USB版本

或:

devices->类型,价格,名称

计算机>处理器,ram

mobile->内存

pendribe-> USB版本

或:

设备 - > id,价格,名称

属性 - > id,id_attribute,value