2017-04-21 45 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

您从公司分离出来的地址作为公司可能会共享相同的地址,从公司表引用地址数据库进入自己的表,您可以通过多带来这一切在一起。 - 他们使用的公司和数据库之间的多个链接。

当然,这仍然是过于简单化,因为您可以通过将城市/州划分成单独的表来进一步标准化整个地址...