mySQL:包含多列

时间:2015-10-03 10:27:57

标签: mysql database-design split

很抱歉,如果这个问题可能非常基本(甚至是愚蠢的),但我对mySQL的熟练程度不高。但是,我需要为我的硕士论文创建一个数据库,所以我想确保它是最“优雅”和尽可能正确的。

我有一个数据集,其中有许多合并和收购交易相关信息(dealid + 12列)。我需要添加有关交易行业的信息。然而,这些信息来自3个不同的数据库,这些数据库适用于M& A的子集:一些交易有一个分类,另一个有另一个分类。

据我所知,我有两个选择:将所有内容整合到交易表中,或者将其分成4个表(一个用于交易,一个用于每个不同的分类)与1-1关系。在第一种情况下,我会有一个包含超过50列的表,但第二种方法看起来不太好。

这些方法中的一种是否有意义?还是有另一种我不知道的方式?

编辑:现在我有4个excel表,我想导入到mySQL中。主表是“交易”表:它具有主键“dealid”,然后是其他列,如“parentname”,“targetname”等。 到目前为止,我还有3个表,每个表分别一个。主键再次是“dealid”,但随后每个表都有特定的列(大约15个),因为每个分类都有不同的功能(例如NACE代码,NACE代码描述,行业部门,SIC代码等)。

提前致谢。

2 个答案:

答案 0 :(得分:3)

一般来说,你的目标应该是拥有更小,更简单的表格,然后你可以用不同的方式进行组合。

https://en.wikipedia.org/wiki/Database_normalization

如果有必要,您可以使用JOIN,VIEWS和其他有趣的东西将特定需求所需的信息整合在一起。

答案 1 :(得分:-1)

在您的情况下,具体应该有不同的表格,然后合并。

为什么呢?关系数据库旨在处理不同表中的数据。通常,单个表包含单个"实体",并且实体具有关系。您已在问题中明确定义了多个实体 - "交易"和"行业"。从这个问题来看,我不确定最佳解决方案是2,3或4个实体表,但显然不止一个。

接下来,当您实现它们时,您希望拥有连接它们的键。我强烈建议在每个表中使用自动递增的主键,并将其用于关系。

所以,这是一个如何定义表的概念性例子:

create table industries (
    IndustryId int not null autoincrement primary key,
    IndustryCode varchar(10),
    . . .
);

create table deals (
    DealId int not null autoincrement primary key,
    IndustryId int,
    . . .,
    constraint fk_deals_industry foreign key (IndustryId) references Industries(IndustryId)
);