1

顧客関係管理アプリケーションを使用しています。2 つのテーブルがあります。tbl_Inquiry_masterエンド ユーザーが提起した問い合わせの質問の詳細をtbl_Inquiry_History格納するためと、問い合わせの回答の詳細を格納するためです。

ただし、これは 1 つの質問ストアを tabletbl_Inquiry_masterに格納するための知識と、その問い合わせに対するスタッフからの回答を table に格納することを示していますtbl_Inquiry_History

詳細については、テーブルtbl_Inquiry_masterスキーマを表します。

Column Name           Data Type         
_________________________________________
Id               varchar(50)     
Inquiry_subject  varchar(100)   
Status_id        numeric(18, 0) 
Created_date     datetime   
Priority_id      numeric(18, 0) 
User_id          varchar(50)    
Email_Address    varchar(50)    
Service_id       numeric(18, 0) 
Inquiry_Content  varchar(1024)      
TimeStamp        datetime   

テーブルtbl_Inquiry_Historyスキーマ:

 Column Name           Data Type         
_________________________________________
Id                     numeric(18, 0)   
Inquiry_id             varchar(50)  
Inquiry_subject        varchar(50)  
Service_id             numeric(18, 0)   
Priority_id            numeric(18, 0)   
User_id                varchar(50)  
Status_id              numeric(18, 0)   
Inquiry_desc           varchar(1024)    
IsDisplay              bit  
IsRead                 bit  
IsReplied              bit  
TimeStamp              datetime 
Activity_start_time    datetime 
Activity_expire_time   datetime 

テーブルtbl_User_masterスキーマ:

 Column Name           Data Type        PK/FK       Reg Table         Ref Key
____________________________________________________________________________________
Id                     varchar(50)       PK            -                -
User_id                varchar(50)       FK         tbl_Login_master   Id
Full_Name              varchar(50)
.
.
Email_Address          varchar(50)

テーブルtbl_Questionスキーマ:

Column Name  DatType        PK/FK  Ref Table          Ref Key
____________________________________________________________________
Id           int            PK        -                  -
UserId       varchar(50)    FK     tbl_User_master      Id
Body         varchar(1024)  
Inquiry_Id   varchar(50)    FK     tbl_Inquiry_master   Id

テーブルtbl_Answerスキーマ:

Column Name  DatType        PK/FK  Ref Table          Ref Key
____________________________________________________________________
Id           int            PK        -                  -
QuestionId   int            FK     tbl_Question         Id
Body         varchar(1024)
Inquiry_Id   varchar(50)    FK     tbl_Inquiry_master   Id

ただし、複数の照会の質問 (エンドユーザーによって提起された) と複数の照会の回答 (スタッフユーザーによって提供された) を保存する方法がわかりません。

エンド ユーザーから生成された新しい問い合わせを挿入する方法と、テーブル階層に情報を保存する方法について、このストアド プロシージャを含めます。

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[InsertInquiry]
(
    @Inquiry_subject VARCHAR(50),
    @Service_name VARCHAR(50),
    @Priority_type VARCHAR(25),
    @User_id VARCHAR(50),
    @Inquiry_desc VARCHAR(1024),
    @email VARCHAR(50),
    @NewId VARCHAR(50) OUT
)
AS
SET NOCOUNT ON;
declare @var1 int
declare @var2 int
declare @var3 int
declare @uniqueRef char(14)
set @uniqueRef = dbo.UniqueRefNum(rand(), rand(), rand(), rand())
BEGIN TRAN;
    BEGIN TRY
        SET @var1= (SELECT [Id] FROM [OmStocks].[dbo].[tbl_Status_master] WHERE (Status_name='Open'))
        SET @var2= (SELECT [Id] FROM [OmStocks].[dbo].[tbl_Service_master] WHERE (Service_name=@Service_name))
        SET @var3= (SELECT [Id] FROM [OmStocks].[dbo].[tbl_Priority_master] WHERE (Priority_name=@Priority_type))
        INSERT INTO [OmStocks].[dbo].[tbl_Inquiry_master]
           ([Id]
           ,[Inquiry_subject]
           ,[Status_id]
           ,[Created_date]
           ,[Priority_id]
           ,[User_id]
           ,[Email_Address]
           ,[Service_id]
           ,[Inquiry_desc])
        VALUES
           (@uniqueRef,@Inquiry_subject,@var1,CONVERT(DATETIME,GETDATE(), 101),@var3,@User_id,@email,@var2,@Inquiry_desc)
        INSERT INTO [OmStocks].[dbo].[tbl_Question]
           ([UserId],[Body],[Inquiry_Id])
        VALUES
           (@User_id,@Inquiry_desc,@uniqueRef)
        INSERT INTO [OmStocks].[dbo].[tbl_Inquiry_History]
           ([Inquiry_id]
           ,[Inquiry_subject]
           ,[Service_id]
           ,[Priority_id]
           ,[User_id]
           ,[Status_id]
           ,[Inquiry_desc]
           ,[IsDisplay]
           ,[IsRead]
           ,[IsReplied]
           ,[Activity_start_time])
        VALUES
           (@uniqueRef,@Inquiry_subject,@var2,@var3,@User_id,@var1,@Inquiry_desc,0,0,0,CONVERT(DATETIME,GETDATE(), 101))
    SET @NewId= @uniqueRef
    COMMIT TRAN;
    END TRY 

BEGIN CATCH
    ROLLBACK TRANSACTION;
    -- Raise the error with the appropriate message and error severity
    DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int;
    SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY();
    RAISERROR(@ErrMsg, @ErrSeverity, 1);
END CATCH;

このシナリオのデータを格納するためにスキーマに加える必要がある変更を提案してもらえますか?

4

3 に答える 3

1

簡単に言えば、この順序で階層を形成する User テーブル、Question テーブル、Answer テーブルが必要です。各回答行には、関連する質問に戻る外部キーがあります。各質問行には、質問をしたユーザーに戻る外部キーがあります(ユーザーは顧客/契約などに戻る外部キーを持っていると思います)。次に、そのエンティティにのみ関連する属性で各エンティティを装飾します。履歴テーブルは、回答テーブル (マスター テーブルからの正規化されていない多数の列) ではなく、現時点では監査証跡のように見えます。

何かのようなもの:-

User table
---------------------------
Id          int
Email       varchar(50)


Question table
---------------------------
Id          int
UserId      int
Body        varchar(1024)


Answer table
---------------------------
Id          int
QuestionId  int
Body        varchar(1024)

次に、適切なレベルでスキーマから列を追加します。たとえば、Status_id は質問または回答のステータスを表しますか。Priority_id は Answer ではなく Question に関連していると思うので、Question テーブルにのみ存在する必要があります。

各列の実際の使用法を知らなければ、スキーマに直接関連するより具体的な答えを出すことは困難です。

于 2013-10-22T18:08:06.760 に答える
0

Ok。もう一度やりましょう。

  1. データベースからテーブル tbl_Question を削除し、これまでに存在した記憶をすべて消去します。

  2. データベースからテーブル tbl_Answer を削除し、これまでに存在した記憶をすべて消去します。

  3. ユーザーが質問をすると、新しい ID で質問を記録する tbl_Inquiry_master に行を追加します。ユーザーが複数の質問をする必要がある場合は、tbl_Inquiry_master に新しい行を追加して、各質問を記録します (それぞれに固有の ID があります)。

  4. スタッフが質問に返信したら、回答を記録する tbl_Inquiry_History に行を追加します。この行の Inquiry_id は、tbl_Inquiry_master で関連する質問の ID を指す必要があります。スタッフの別のメンバーが同じ質問に 2 回目以降の返信を追加したい場合は、別の行を tbl_Inquiry_History に追加して、tbl_Inquiry_master の質問の同じ ID を指すこの行の Inquiry_id で回答を記録します。

于 2013-10-23T14:29:58.710 に答える