私はSQL Serverからデータを引き出し、Excelフォームに情報を表示できるマクロを含むExcelフォームを作成しました。ユーザーはフォームを更新でき、マクロはSQL Serverに書き戻されます。データベース設計:テーブル構造
これはExcel形式です。ユーザーは黄色で強調表示された値を入力する必要があります。例Johnは、 'LOHAM'、年 '2016'、月 '3'の順に 'JOHN'というユーザーフィールドを入力します。一度それが完了したら、Johnは、[検索]ボタンをクリックして、Region = LATAM、Year = 2016、およびMonth = 3のSQL Serverからすべてのデータをプルします。関連するすべての情報は、Area、Region、Mgmt、CompanyCode、AcctUnit、アカウントと値(レコードの複数の行を持ち、ユーザーはこれらのレコードを編集できません)。今、Johnはフィールドコメントに値を入力する必要があります。彼は、ジョンが「保存」ボタンをクリックして、マクロをエクセルでしょう。ここSQL Serverに
をコメント値を記述します完了したら、マクロをエクセルの表の構造は、上記の表構造に基づいて
CREATE TABLE [dbo].[Sales](
[Region] [varchar](10) NOT NULL,
[Area] [varchar](10) NOT NULL,
[Mgmt] [varchar](10) NOT NULL,
[CompanyCode] [int] NOT NULL,
[AcctUnit] [varchar](7) NOT NULL,
[Account] [varchar](10) NOT NULL,
[Comment] [varchar](100) NULL,
[Year] [int] NULL,
[Jan] [float] NULL,
[Feb] [float] NULL,
[Mar] [float] NULL,
[Apr] [float] NULL,
[May] [float] NULL,
[Jun] [float] NULL,
[Jul] [float] NULL,
[Aug] [float] NULL,
[Sep] [float] NULL,
[Oct] [float] NULL,
[Nov] [float] NULL,
[Dec] [float] NULL,
[SYS_CreatedBy] [varchar](15) DEFAULT SYSTEM_USER,
[SYS_CreatedDate] [datetime] DEFAULT GETDATE(),
[SYS_ModifiedBy] [varchar](15) DEFAULT SYSTEM_USER,
[SYS_ModifiedDate] [datetime] DEFAULT GETDATE(),
CONSTRAINT [PK_Sales] PRIMARY KEY NONCLUSTERED
(
Region ASC,
Area ASC,
Mgmt ASC,
CompanyCode ASC,
AcctUnit ASC,
Account ASC,
)
)
を読み書きしますJohnが既にSQL Serverに更新したコメントには影響しませんが、他のユーザーはコメントをどのように置くことができますか?例として、Johnは既にコメントを入力してSQL Serverに更新されましたが、Aliceは同じデータをSQL Serverから引き出します(region = LATAM、Year = 2016、Month = 3)。ジョンのコメントではなく、このケースは空白にする必要があります。
上記の表の設計に基づいて、コメントの値はさまざまなユーザーによって変更され続けます。どのように表の構造を再設計してコメントを各ユーザに固有にすることができますか?
コメント列はこの表にはいけません。それはSalesCommentsテーブルにある必要があります。また、毎月の列を持つべきではありません。 SaleDate列とAmount列が必要です。この全体のテーブルは、深刻な必要性または正規化にあります。たとえば、このテーブルには地域を指定しないでください。あなたは顧客を持っていて、顧客には地域が割り当てられます。他の多くの列と同じこと。また、フロートを使用して販売情報を保持するように注意してください。これは、すべての値を正確に保持できないおおよそのデータ型です。 –
一意であるSalesIDにID列を追加する必要があります(SalesIDかもしれないし、SalesIDに戻って外部キーを使用して独自のテーブルにコメントを分解する)。残りのすべてのデータを複製することなく、「データベースの正規化」と呼ばれるこの削除プロセスを実行します(http://stackoverflow.com/questions/723998/what-are-1nf-2nf-and-3nf-inの回答とコメントを参照)。 – nscheaffer
リレーショナルデータベースは、[データベースの正規化](https://en.wikipedia.org/wiki/Database_normalization)というプロセスで作成されます。 –