【发布时间】:2013-02-04 09:57:54
【问题描述】:
我对项目中的所有实体都使用 Phalcon\Mvc\Model(以保持标准化)。 今天我不得不在我的mysql数据库中导入maxmind geoip数据库来实现一些实体和maxmind位置(和块)之间的原生关系。
Maxmind数据库默认以csv形式交付,如何在mysql中组织——是每个开发者都需要根据自己的需求来解决的问题。 Maxmind 数据库包含 2 个文件:
- GeoLiteCity-Blocks.csv(存储 IP 范围)
- GeoLiteCity-Location.csv(存储位置信息)
大多数教程建议使用以下表定义来存储具有 IP 范围的表:
CREATE TABLE IF NOT EXISTS `GeoLiteCity_Blocks` (
`startIpNum` int(10) unsigned NOT NULL,
`endIpNum` int(10) unsigned NOT NULL,
`locId` int(10) unsigned NOT NULL,
PRIMARY KEY (`startIpNum`,`endIpNum`)
) ENGINE=InnoDB;
如您所见,存在复合主键。在 Phalcon\Mvc\Model 中使用这样的键可以吗?我想有一些限制(从逻辑上讲,它们应该存在,例如,我无法预测 Phalcon\Mvc\Model::findFirst($key) 方法的行为)
真的,我不关心这张表将使用的磁盘大小,对我来说只有一件事很重要 - 性能。另外我想保持所有模型标准化,而不是记住每个实体/表的大量小方面。
所以,我的问题是:是否可以使用 Phalcon\Mvc\Model 和复合键,或者最好多制作一个 id 列,这将是主键并将索引添加到 startIpNum 和 endIpNum让选择更快?
【问题讨论】:
标签: php composite-primary-key phalcon