2017-04-21 101 views
1

昨天我接受了一位SQL開發人員的現場採訪,面試官問我一個我無法令人信服地回答的問題。如果有人能以正確的解決方案幫助我,我將不勝感激。訪問者問:「我有一個應用程序和數據庫需要爲將來的應用程序開發進行規範化,目前,我有一個表(原始),我希望你用一個父子關係轉換成兩個表。父母與子女)SQL中的數據規範化(Parent-Child)

原始表的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將有相同的父ID爲微軟的屬性(LinkedIn是微軟的一個子公司)?

3)樣本數據1,2和3是否有相同的parent_ID? 「

謝謝!

+2

這是一個很糟糕的面試問題。我會問採訪者爲什麼他們認爲把這個分成兩個表是正常的。根據使用情況,這個表格可能已經被正常化了。或者這是以某種方式澄清了他們正在尋找的東西。我討厭那些模糊的面試問題,你幾乎不得不閱讀他們的想法。 –

+1

你必須閱讀他們的想法 - 就像你真正的人試圖給你的要求:) – Randy

回答

1

我同意@Sean,分裂成兩個表是沒有意義的。也許這是一個有趣的問題。在我看來,你需要將它分割成4個表中如下圖:

enter image description here

您從公司分離出來的地址作爲公司可能會共享相同的地址,從公司表引用地址數據庫進入自己的表,您可以通過多帶來這一切在一起。 - 他們使用的公司和數據庫之間的多個鏈接。

當然,這仍然是過於簡單化,因爲您可以通過將城市/州劃分成單獨的表來進一步標準化整個地址...