Mysql动态表扩展列

标签 mysql database-design

我想知道是否有比我在这个项目中使用的更好的方法来制作一些 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,基于我对您的业务需求的理解:

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
);

关于Mysql动态表扩展列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9197761/

相关文章:

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows等…期望参数1为资源或结果

mysql - 设置Mysql索引组列或单独

MySQL 和 HBase 连接

mysql - 功能依赖性澄清

mysql - 语句检查日期时间是否在列中的两个日期时间之内

mysql - Yii:引用多个表中行的最佳方式?

sql - 预约系统设计

database-design - Redis 是这个模型的正确选择吗

database-design - Core Data 比 SQLite 更适合服务器客户端数据库设计吗?

c# - 我无法在 ODBC(RDO) 中找到数据源以使用 VS2015 添加到 Crystal 报告 Mysql 中