2017-04-21 6 views
1

昨日、面接者が私に納得できない質問をしたSQL開発者の地位に関するオンサイトのインタビューを受けました。もし誰かが正しい解決策を手伝ってくれれば幸いです。SQL(親子)のデータ正規化

インタビュアーは、「将来のアプリケーション開発のために正規化する必要があるアプリケーションとデータベースがあります。現在、親子関係のある2つの表に変換する必要がある(元の) 。親と子)

オリジナルテーブルのstuctureは以下のようである:

CREATE TABLE [dbo].Original(
    ID [varchar](11) NOT NULL, 
    SourceDatabase [varchar](10) NULL, 
    CompanyName [varchar](25) NULL, 
    Address [nvarchar](30) NULL, 
    City [char](25) NULL, 
    State [char](2) NULL, 
    Zip [char](9) NULL 
) 

--Test Data 

INSERT INTO [dbo].[Original] 
        ([ID] 
        ,[SourceDatabase] 
        ,[CompanyName] 
        ,[Address] 
        ,[City] 
        ,[State] 
        ,[Zip]) 
        VALUES 
        ('1000000001','ORACLE', 'Microsoft', '123 ABC', 'EDISON', 'NJ', '10000') 
        , ('1000000001','DB2', 'Microsoft', '123 ABC', 'EDISON', 'NJ', '10000') 
        , ('1000000024','ORACLE', 'Microsoft', '456 ABC', 'EDISON', 'NJ', '10000') 
        , ('1000000035','DB2', 'LinkedIn', '123 ABC', 'Mountain View', 'CA', '10056') 
        , ('1000000002','MSSQL', 'GOOGLE', '456 9th Street', 'PROVIDENCE', 'RI', '10001') 
        , ('1000000003','MSSQL', 'APPLE', '3100 EAST End Ave,Suite 70729', 'GREENWICH', 'CT', '10002') 

回答次の質問: -

1)私は親を定義するために必要となる属性と子テーブル

2)LinkedInのは、Microsoftのと同じ親IDを持つことになりますが(LinkedInのは、Microsoftの子会社である)は何ですか?

3)サンプルデータ1,2,3のparent_IDは同じですか? 「

ありがとう!私は意味がありません二つのテーブルに@Sean、分割に同意

+2

これは面倒なインタビューの質問です。私はインタビュアーに、これをちょうど2つのテーブルに分割することが正規化されていると思う理由を尋ねたでしょう。そして使用法によっては、このテーブルはすでに正常化されている可能性があります。あるいは、何とか彼らが探しているものについて何らかの明確化をしていたのです。私はこれらの面接の質問が嫌なので、あなたはほとんど彼らの心を読む必要があります。 –

+1

あなたはあなたの心を読まなければなりません - 実際の人と同じように、あなたに要求を与えようとしています:) – Randy

答えて

1

。多分それはトリックの質問でした。私の意見では、あなたがのように4つのテーブルに分割する必要があるだろう次の図:企業は、会社のテーブルから同じアドレス、参照アドレスを共有する可能性があるとして

enter image description here

あなたは会社からのアドレスを別々のデータベースには、自分のテーブルに行くと、あなたはマルチにして、すべて一緒にこれを持参します。 - 使用する企業とデータベース間の多岐にわたるリンク。

市/州を別々のテーブルに分割することで住所全体をさらに正規化できるので、それはまだ単純すぎます。

関連する問題