【问题标题】:correct mysql data type for column that contain multiple index ids包含多个索引 ID 的列的正确 mysql 数据类型
【发布时间】:2015-06-01 07:05:21
【问题描述】:

在我的 sql 中,我有一个包含交易列表的表(交易)

每笔交易都有一个 id。

我有另一个包含公司列表的表(公司),在这个表中有一个交易列,这里会有交易的 id,可能有多个交易。

公司表中交易列的最佳数据类型是什么?

对不起,如果我的术语不正确!

【问题讨论】:

  • 我认为应该使用String,并用逗号分隔保存ids
  • 这不是一个好主意。将该字段移动到具有公司 ID 和行业 ID 的表中。之后您将节省大量搜索、更新和删除时间
  • 与您在交易表中使用的数据类型相同
  • 没有(好的)数据类型。见规范化

标签: mysql sqldatatypes


【解决方案1】:

为了保持表中数据项的原子性(模块化)以及未来 SELECT 查询(JOIN、GROUPing、搜索等)的灵活性,最好的做法是让表具有保持这些数据项之间关系的字段。这将帮助您建立多对多关系。

所以这里是例子:

-- Create syntax for TABLE 'companies'
CREATE TABLE `companies` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Create syntax for TABLE 'trades'
CREATE TABLE `trades` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- Create syntax for TABLE 'companies_trades'
CREATE TABLE `companies_trades` (
  `company_id` int(11) unsigned NOT NULL,
  `trade_id` int(11) unsigned NOT NULL,
  PRIMARY KEY (`company_id`,`trade_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

【讨论】:

    猜你喜欢
    • 2013-04-22
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2020-10-01
    相关资源
    最近更新 更多