我想知道是否有比我在这个项目中使用的更好的方法来制作一些 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
)
所以我想与其在每个季节为客户制作一组数字,我更希望能够使用更新的词典表来自动生成一个表。我唯一担心的是我们有很多很多数字,这样会形成一个非常大的表格,所有这些表格都组合在一起,但也许也可以自动将其限制在多个组中,这样它就不会成为一个压倒性的表格。
我不确定我是否说得足够清楚,所以请随时对需要澄清的事情发表评论。
最佳答案
这是一个标准化的 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
);
关于Mysql动态表扩展列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9197761/