2012-02-08 136 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