我想知道是否有更好的方法来创建一些mysql表,而不是我在这个项目中使用的表。我有一系列代表特定时间的数字。例如,数字101将代表2012年1月12日。它不仅代表时间,而且是信息的基础。所以我创建了一个词典表,其中包含我们使用的所有数字以及详细信息,例如该数字的时间和含义。我有另一张桌子,每个顾客,无论何时购买,我都会检查购买是否符合特定时间的要求。但我检查每次购买和词典表的表格没有关联。我想知道是否有更好的方法,也许是一种方法来获取一个sql语句从Lexicon表中获取所有数据并将其转换为列,而行由客户ID和真/假选择器组成。
table structure
THIS IS THE CUSTOMER PURCHASED TABLE T/F
CREATE TABLE `group1` (
`100` TINYINT(4) NULL DEFAULT '0',
`101` TINYINT(4) NULL DEFAULT '0',
`102` TINYINT(4) NULL DEFAULT '0',
... this goes on for 35 times each table
PRIMARY KEY (`CustID`)
)
THIS IS THE LEXICON TABLE
CREATE TABLE `lexicon` (
`Number` INT(3) NOT NULL DEFAULT '0',
`Date` DATETIME NULL DEFAULT NULL,
`OtherPurtinantInfo` .... etc
)
所以我猜想不是每个季节为客户制作一组数字,而是希望能够使用更新的词典表来自动生成表格。我唯一担心的是,我们有许多数字,这样可以将一个非常大的表组合在一起,但也许可以自动限制为组,这样它就不是一个压倒一切的表。
我不确定自己是否足够清楚,所以请随意评论需要澄清的事项。
答案 0 :(得分:1)
这是一个标准化的ERD,基于我对您的业务要求的理解:
分类广告在某些日期运行,并且某个广告可以针对多个分类广告日期运行。
制作表格的SQL语句:
CREATE TABLE IF NOT EXISTS `classified_ads` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `classified_dates` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`date` DATETIME NOT NULL,
`info` TEXT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `classified_ad_dates` (
`classified_ad_id` INT UNSIGNED NOT NULL,
`classifiend_date_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`classified_ad_id`, `classifiend_date_id`),
INDEX `fk_classified_ad_dates_classified_ads1` (`classified_ad_id` ASC),
INDEX `fk_classified_ad_dates_classified_dates1` (`classifiend_date_id` ASC),
CONSTRAINT `fk_classified_ad_dates_classified_ads1`
FOREIGN KEY (`classified_ad_id`)
REFERENCES `classified_ads` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_classified_ad_dates_classified_dates1`
FOREIGN KEY (`classifiend_date_id`)
REFERENCES `classified_dates` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE
);