2012-02-08 11 views
2

私はこのプロジェクトで使用しているものよりもいくつかのmysqlテーブルを作成するより良い方法があるのだろうかと思います。私は特定の時間を表す一連の数字を持っています。たとえば、101という数字は、2012年1月12日を表します。それは時間を表すだけでなく、その情報の非常に基本的なものです。だから私は使用するすべての数字と時間とその数字の意味などの詳細を持つレキシコンテーブルを作成しました。私は顧客ごとに別のテーブルを用意しています。購入するたびに特定の時間に購入が可能であることを確認します。しかし、それぞれの購入をチェックするテーブルとレキシコンテーブルはリンクされていません。より良い方法があるのだろうか、多分SQL文をレキシコンテーブルからすべてのデータを取り出して、カラムを顧客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 

) 

だから私の代わりに数字のグループIは、自動的にテーブルを生成するように更新辞書テーブルを使用することができるという希望のお客様のために、季節ごとを作ると思います。私の唯一の懸念は、非常に大きなテーブルをすべて一緒に組み合わせるようにするためには数多くの番号があることですが、おそらくそれもグループに自動的に制限されて圧倒的なテーブルにならない可能性があります。

私は十分明確であるかどうか分かりませんので、明確にする必要があることについて自由にコメントしてください。ここで

+2

正規化の欠如は、私の頭が痛くを作っています。 – Sonny

+0

私はこのプログラムを8年前に作ったのですが、これはデータベース管理のための私の最初の試みの1つでした。確かにいくつかの落とし穴があります。複数のテーブルを用意するのはちょっと面倒です...更新している間に、それを正規化することもできます。 – Mallow

答えて

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

お元気ですか、そのイメージはオンラインツールから取られますか? –

+0

私が理解できるように。これは、Date定義を保持するテーブルと広告との間に多かれ少なかれ関係があります。(あなたは鋭い目を持っていますが、私はこのタイプのプログラムのすべての参照を削除したと思っています.-おそらくあなたを助けたでしょうすぐに問題を特定することができます)。これが当てはまる場合、私は現在進行する方法を知っています。ありがとう:) – Mallow

+0

@Mallow - これはまさにこれです。 1つの広告は多くの日付に実行でき、各日付には複数の広告を設定できます。 – Sonny

関連する問題