2012-02-08 94 views
2

我想知道是否有更好的方法来创建一些MySQL表,而不是我在这个项目中使用的。我有一系列代表特定时间的数字。例如,数字101代表2012年1月12日。它不仅代表时间,而且是这些信息的基础。所以我创建了一个词库表,其中包含我们使用的所有数字以及该数字的时间和含义等详细信息。我还有另一张每个客户的表,每当他们进行购买时,我都会检查购买是否符合特定时间。但是我检查每次购买的表格和词典表没有链接。我想知道是否有更好的方法,也许有办法让一个sql语句从Lexicon表中获取所有数据,并将其转换为列,而行由顾客ID和真/假选择器组成。Mysql动态表扩展列

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 

) 

所以我想,而不是使每个赛季我宁愿能够使用更新的词汇表来自动生成一个表中的客户号码组。我唯一担心的是我们有很多很多数字,这样就可以将一张非常大的表格合并在一起,但也许可以自动将它们限制为组,这样它就不是一张压倒性的表格。

我不确定我是否足够清楚,因此随时对需要澄清的事情发表评论。

+2

缺乏规范化的是使我的头不疼。 – Sonny 2012-02-08 16:55:24

+0

8年前我制作了这个程序,这是我第一次尝试数据库管理,它恰好是我最常用的程序。大声笑,所以肯定有一些陷阱,有多个表是有点乏味......所以,当我更新时,它也可能正常化它。 – Mallow 2012-02-08 17:26:36

回答

1

这里有一个标准化的ERD,基于我所了解您的业务要求是:

enter image description here

特定日期的公告来看,和给定的广告可以为多个公告之日起执行。

的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 
); 
+1

嘿桑尼,这个图像是否恰好来自在线工具? – 2012-02-08 17:23:03

+0

只是为了确保我的理解。这是拥有Date定义的表格和广告之间的多对多关系......(您先生有一颗敏锐的眼睛,我想我已经删除了所有关于这是什么类型程序的引用 - 尽管它可能会帮助您)如果是这种情况,我现在知道如何进行,谢谢:) – Mallow 2012-02-08 17:33:31

+0

@Mallow - 这正是这是什么。一个广告可以运行多个日期,每个日期可以有很多广告。 – Sonny 2012-02-08 17:45:31