15个表属性冗余与mysql

时间:2015-08-10 19:52:00

标签: mysql normalization

我遇到的情况应该有15个数据表,对于所有15个表具有相同的属性,但每个表具有不同的用途,并且只有相同的属性名称,因为我需要显示每个表具有不同的记录。

我的所有15个表都包含此属性[no,date,commentary,price,stock]

我已经创建了15个与MySQL具有相同属性的表,但我认为创建这个数据库的方式不对,因为它对于该属性来说看起来是多余的。

我对设计数据库知之甚少。

1 个答案:

答案 0 :(得分:3)

您的数据库中只有不同类型的项目吗?阅读normalization in MySQL(Stack Overflow答案)。

您可以使用相同的列来创建15个具有相同列的表,而不是添加一列,告诉该行的项目类型。因此,您的列可能类似于no, type, date, commentary, price, stock

例如,如果您之前有两个分开的表...

表1

-----------------------------------------------------------
| no   | date        | commentary    | price     | stock  |
-----------------------------------------------------------
| 1    | 2015-08-01  | Lorem ipsum   | 10.00     | 6      |
-----------------------------------------------------------
| 2    | 2015-08-07  | Dolor sit     | 25.00     | 3      |
-----------------------------------------------------------

表2

-----------------------------------------------------------
| no   | date        | commentary    | price     | stock  |
-----------------------------------------------------------
| 1    | 2015-08-03  | An usu nemore | 15.00     | 10     |
-----------------------------------------------------------
| 2    | 2015-07-30  | Eam at eros   | 30.00     | 1      |
-----------------------------------------------------------

您只能创建一个包含表1和表2中数据的表。但是此时间表包含新列type,它告诉该行的项目类型。在此示例中,之前的表1中的数据具有类型10,而表2中的数据具有类型20

------------------------------------------------------------------
| no   | type | date        | commentary    | price     | stock  |
------------------------------------------------------------------
| 1    | 10   | 2015-08-01  | Lorem ipsum   | 10.00     | 6      |
------------------------------------------------------------------
| 2    | 10   | 2015-08-07  | Dolor sit     | 25.00     | 3      |
------------------------------------------------------------------
| 3    | 20   | 2015-08-03  | An usu nemore | 15.00     | 10     |
------------------------------------------------------------------
| 4    | 20   | 2015-07-30  | Eam at eros   | 30.00     | 1      |
------------------------------------------------------------------

现在您可以执行MySQL查询

SELECT * FROM tablename WHERE type = '10'

从表1中选择所有结果时获得与之前类似的结果。