将包含许多列的表转换为具有两列的多个表

时间:2014-09-21 12:57:39

标签: sql database-design data-structures graph tree

是否可以将包含多列的表转换为多列的两列而不会丢失数据? 我会表明我的意思:

假设我有一张桌子

+------------+----------+-------------+
|country code|   site   | advertiser  |
+------------+----------+-------------|
|      US    | facebook | Cola        |
|      US    | yahoo    | Pepsi       |
|      FR    | facebook | BMW         |
|      FR    | yahoo    | BMW         |
+------------+----------+-------------+

行数= [(国家/地区数量)X(网站数量)],广告客户列是从包含有限数量广告客户的列表中获取值的变量

是否可以将3列表转换为具有2列的多个表而不会丢失数据?

如果像这样创建两个表,我将会丢失数据:

+------------+------------+
|country code| advertiser |
+------------+------------+
|  US        | Cola,Pepsi |
|-------------------------|
|  FR        | BMW        |
+-------------------------+

+------------+------------+
|   site     | advertiser |
+------------+------------+
|  facebook  | Cola,BMW   |
|-------------------------|
|  yahoo     | Pepsi,BMW  |
+-------------------------+

但是我是否添加了第三个“连接”表,这有助于保留所有数据并能够重新创建原始表吗?

+--------------+--------------------+
| country code |  site              |
+--------------+--------------------+
|    US        | facebook,yahoo     |
|-----------------------------------|
|    FR        | facebook,yahoo     |
+-----------------------------------+

2 个答案:

答案 0 :(得分:1)

您指定的表格是否可以转换为'进入多个表是由表是否处于第五范式,即当且仅当候选键中隐含的每个非平凡连接依赖关系时确定。

如果表格处于第五范式,则无法将其转换为多个表格。如果表格不是第五种正常形式,那么它是四种较低正常形式中的一种,并且可以通过转换'进一步标准化为第五种正常形式。它分为多个表格。

表的正常形式由列依赖性决定。这些由表的含义决定,即该表在现实世界中代表什么。您尚未说明此表的含义是什么,因此该特定表是否可以转换为多个表是未知的。

您需要了解规范化的过程并使用此功能,您应该能够确定是否可以将包含多列的表转换为多列的两列而不会丢失数据? 基于表中的列依赖项。

答案 1 :(得分:0)

您可能正在寻找Entity-Attribute-Value。当然,它比你的建议要好得多,以保持字段值的组织,不需要搜索字段来确定是否存在值。