2015-05-03 66 views
1

我在存储广告的地方制作数据表。数据库中的Mysql关系

我的广告表看起来如下:

Advertisement: 
id (PK) 
title 
description 
category_id (FK) 
.. 

我有2种不同类型的广告:我店的汽车,我存储房地产。 因此,我对这两种类型都有不同的属性。即汽车有一个品牌和门的数量,而房地产有多少房间..

因此,我想问问什么是最好的方式来存储这种关系。

我应该把所有的值放在一个大的广告表中,但是有一些值总是空的缺点。

或者我应该制作2个附加表格并在广告表格中保留常用值?

CarTable 
id(PK) 
advertisement_id (FK) 
brand 
numberOfDoors 
... 

RealEstateTable 
id(PK) 
advertisement_id (FK) 
nrOfRooms 
... 

我不认为带有2个附加表的第二个解决方案非常好。 有什么建议吗?谢谢

回答

0

的方法之一可能是:

Advertisement: 
id (PK) 
title 
description 
category_id (FK) 
.. 

Attribute type: 
id (PK) 
name 
code (can be optional) 

Advertisement's attributes: 
id (PK) 
Advertisement id (FK) 
Attribute id (FK) 
Attribute value 
0

我觉得第二个是正确的。 当然,它取决于数据库有多大以及有多少个空列。 我想是因为:

  1. 将有类型

  2. 通常我们正使用“SELECT * ......”条款,但很多列的表的差异没有任何空单元格是不好的,在你的情况下所有这些NULL字段将加载流量

  3. 在所有的数据库引擎进行了优化,使表之间的关系 - 如果你有硬定义关系的关键,这不是一个问题。

+0

所以在那种情况下,我有广告 - CarTable和Advertisement - RealEstateTable之间的一对一关系?有了这个解决方案,我应该在广告表中创建另一个属性来保存广告的类型,如果它是汽车或房地产?如果我搜索不同表格的所有主题,该怎么办? – Steve