【问题标题】:mySQL: tables with many columnsmySQL:具有许多列的表
【发布时间】:2015-10-03 19:47:05
【问题描述】:

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

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

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

其中一种方法有意义吗?还是有其他我不知道的方法?

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

提前致谢。

【问题讨论】:

  • 我不明白你最终会如何得到 50 列。你能给我们举一个你的桌子的例子吗?
  • 每个分类都有很多信息,例如:NACE代码、NACE代码描述、行业组、行业部门等。因此,对于每个分类,我有大约 15 列。问题是这些列从一个分类到另一个分类并不相同。

标签: mysql database-design split


【解决方案1】:

一般来说,您的目标应该是拥有更小、更简单的表格,然后您可以通过多种不同的方式组合这些表格。

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

如有必要,您可以使用 JOIN、VIEWS 和其他有趣的东西将您需要的信息汇总到一起以满足特定要求。

【讨论】:

    【解决方案2】:

    在您的情况下,您应该特别地拥有不同的表,然后将它们组合起来。

    为什么?关系数据库旨在处理不同表中的数据。一般来说,一个表包含一个“实体”,实体之间有关系。您在问题中明确定义了多个实体——“交易”和“行业”。从这个问题来看,我不确定最好的解决方案是 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)
    );
    

    【讨论】:

    • 表不代表实体,它们代表关于实体的谓词。
    • @reaanb 。 . .你的说法毫无意义。在关系代数 数据库的世界中,“谓词”一词通常指的是布尔条件。而且,您似乎错过了响应的重点,即将dealsindustries 分开。否决票(与您的评论时间相关)表明您不同意这种结构。您应该提出自己的结构。
    • 我不同意你的解释,因为它非常不正确。将行与实体混为一谈会妨碍正确理解,并导致与对象的进一步混淆,从而导致架构糟糕、系统效率低下和不可维护,最终导致项目失败。表代表谓词,行代表关于实体/值的命题。请参阅en.wikipedia.org/wiki/Relation_(database)en.wikipedia.org/wiki/Relational_modeldcs.warwick.ac.uk/~hugh/M359/What-a-Database-Really-Is.pdf,以及 Codd、Chen、Date 和 Darwen。
    • 在您的示例中,IndustryIdDealId 代表各自的实体。 Industries 表表示谓词“ID 为 IndustryId 的行业的代码为 IndustryCode”,并且行包含使该谓词为真的实体/值。 deals 表包含并关联两种实体类型。请注意,外键约束不建立关系,关系由交易和关联的行业表示,被记录在一起;外键强制执行完整性,因此只有记录的行业才能与交易相关联。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2018-04-26
    • 1970-01-01
    相关资源
    最近更新 更多