Strategy in Data Warehouse Table Structure

I'm building a relational data warehouse, and there are two approaches that seem almost interchangeable to me, despite being quite different from each other. 
The first approach is rather simple.  I have a "User" table with a bunch of foreign keys, and then I have a bunch of other tables containing user attributes.  One table for "department," another for "payroll type,"
another for "primary location," and so on for 20 different user attributes.
The second approach, instead of using 20+ tables, combines this down into far fewer.  I would have an "Attribute Type" table and "Attribute" table.  These two, in conjunction with a bridge table, could accommodate as many
attributes as necessary within three tables.  If the business wants to track a new "user-related" attribute, I don't need any new tables.  I would simply add the new attribute into the "Attribute Type" table as, say, "attribute
21," and begin tracking it.  All the work could be done without ever adding new tables or columns.
Both approaches seem to maintain (at least) 3NF.  Is one approach better in certain circumstances, and the other approach more appropriate at other times?  Any insight is appreciated!
BrainE

Hi Brian,
The second approach with three tables is not really good here. Query Optimizer in SQL Server has a few enhancements for Star/Snowflake schemas in DW environment and 3-table schema would not be able to benefit from them. It would be also harder to maintain,
load data and query. Finally, your attributes could have different data types, which you need to store. 
I would suggest to go with first solution (multiple dimensions table) and follow a few extra rules:
Avoid nullable attributes
Choose attribute data types as narrow as possible
Avoid string attributes. If needed create separate dimension tables for them
Use columnstore indexes and
Upgrade to SQL Server 2014 if it is all possible - there are multiple enhancementsin batch-mode processing there
Thank you!
Dmitri V. Korotkevitch (MVP, MCM, MCPD)
My blog: http://aboutsqlserver.com

Similar Messages

  • Error while creating data warehouse tables.

    Hi,
    I am getting an error while creating data warehouse tables.
    I am using OBIA 7.9.5.
    The contents of the generate_clt log are as below.
    >>>>>>>>>>>>>>>>>>>>>>>>>>
    Schema will be created from the following containers:
    Oracle 11.5.10
    Universal
    Conflict(s) between containers:
    Table Name : W_BOM_ITEM_FS
    Column Name: INTEGRATION_ID.
    The column properties that are different :[keyTypeCode]
    Success!
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    There are two rows in the DAC repository schema for the column and the table.
    The w_etl_table_col.KEY_TYPE_CD value for DW application is UNKNOWN and for the ORA_11i application it is NULL.
    Could this be the cause of the issue? If yes, why could the values be different and how to resolve this?
    If not, then what could be the problem?
    Any responses will be appreciated.
    Thanks and regards,
    Manoj.

    Strange. The OBIA 7.9.5 Installation and Configuration Guide says the following:
    4.3.4.3 Create ODBC Database Connections
    Note: You must use the Oracle Merant ODBC driver to create the ODBC connections. The Oracle Merant ODBC driver is installed by the Oracle Business Intelligence Applications installer. Therefore, you will need to create the ODBC connections after you have run the Oracle Business Intelligence Applications installer and have installed the DAC Client.
    Several other users are getting the same message creating DW tables.

  • How to write export dump commad with no datable data only table structure.

    How to write export dump commad with no datable data only table structure will there and command for hole schma.
    e.g. export dump command for scott schema and all table within scott schema in it no table data should be exported.

    If I understand the question, it sounds like you just need to add the flag "ROWS=N" to your export command (I assume that you're talking about the old export utility, not the Data Pump version).
    Justin

  • Merant Driver is not available for Windows 7 to create data warehouse table

    Hi All,
    I had installed Database, OBIA, DAC and Informatica in windows 7 64 bit. Installation is successful.
    To create data warehouse tables through DAC, we need merant driver. But Merant driver is not available in windows 64bit.
    I followed the below procedue to create a merant driver.
    "C:\Windows\SysWOW64\odbcad32.exe"
    Executed odbcad32.exe, and I found the merant driver in the list, when i try to create DSN, I am getting the following error.
    Specified Driver could not be loaded due to system error 193: (Oracle Merant Driver in DAC 10g_Oracle-OH1635326477, c:\orahome\10gR3_1\bifoundation\dac\utilities\DataDirectODBC\seor820.dll).
    Can any one please provide me the solution.
    Regards,
    Kumar

    I know the docs say you must use the merant driver however did you try a normal oracle odbc connnection. I am sure i did this in the past.
    BTW I hope this is just your laptop and you are playing around. I do'nt think Windows 7 is a supported environment. You should consider a supported platform for production and maybe a virtual machine on your windows 7 machine in development so you can practice the install.
    See
    Oracle Fusion Middleware Supported System Configurations
    http://www.oracle.com/technetwork/middleware/ias/downloads/fusion-certification-100350.html
    System Requirements and Supported Platforms for Oracle Business Intelligence Applications 7.9.6.3 http://www.oracle.com/technetwork/middleware/bi/obia7963cert-matrix-395521.xls

  • How to reset data Warehouse table

    For fixing some mistakes, I'd like to reset the whole Data Warehouse tables ( clear alll data in the tables).
    Is there any way to achieve this with DAC client?
    Roger

    Nothing to worry. We have the option in DAC. Navigate to Tools -> ETL Management -> Reset Data Sources. Give the confirmation text in the dialog box. With this action the refresh dates will become Null for all tables and which causes to do a full load in the next ETL run.

  • "Create Data Warehouse Tables"  doesn't create any tables ?

    We are attempting to install and configure OBIA 7.9.6 for Peoplesoft 8.9. The steps to install and configure Informtica and DAC and their respective repositories are completed. However, Step 4.12 to Create Data Warehouse Tables on Oracle database, although apparently successful (returns no error) does not create any tables or other objects in the datawarehouse schema. Apparently, "oracle_bi_dw.ctl" is being generated with NO DDL definitions only a two line header to the effect
    [DDL File]
    Version = 1Has anyone encountered a similar issue and resolved it ? (We have an SR open with Oracle Support).
    NOTE : ddlimp does connect succesfully to the database -- I created a Database ON LOGON trigger to catch and trace logons by the datawarehouse schema.
    Hemant K Chitale
    Edited by: Hemant K Chitale on Nov 20, 2009 11:54 AM

    Closing this thread.
    A Reinstall worked.

  • How to export and import only data not table structure

    Hi Guys,
    I am not much aware about import ,export utility please help me ..
    I have two schema .. Schema1, Schema2
    i used to use Schema1 in that my valuable data is present . now i want to move this data from Schema1 to Schema2 ..
    In schema2 , i have only table structure , not any data ..

    user1118517 wrote:
    Hi Guys,
    I am not much aware about import ,export utility please help me ..
    I have two schema .. Schema1, Schema2
    i used to use Schema1 in that my valuable data is present . now i want to move this data from Schema1 to Schema2 ..
    In schema2 , i have only table structure , not any data ..Nothing wrong with exporting the structure. Just use 'ignore=y' on the import. When it tries to do the CREATE TABLE it (the CREATE statement) will fail because the table already exists, but the ignore=y means "ignore failures of CREATE", and it will then proceed to INSERT the data.

  • Data storage & Table structure in BW/BI

    Hi Experts,
                    I know that when we create an infocube and load data it gets stored in BI server, here my question is where does the data exactly get stored in depth in the server and i would like to know the table structure of the data that is stored in BW/BI.
    Thanks in advance
    Shiva

    Hi,
    You have tables to Master Data:
    Eg: 0MATERIAL
    /BI0/HMATERIAL                 Hierarchy: InfoObject Material
    /BI0/IMATERIAL                 SID Structure of Hierarchies: InfoObject M
    /BI0/KMATERIAL                 Conversion of Hierarchy Nodes - SID: InfoO
    /BI0/MMATERIAL                 View of Master Data Tables: Characteristic
    /BI0/PMATERIAL                 Master Data (Time-Ind.): Characteristic Ma
    /BI0/RMATERIAL                 View SIDs and Char. Values: Characteristic
    /BI0/SMATERIAL                 Master Data IDs: InfoObject Material
    /BI0/TMATERIAL                 Texts: Char. Material
    /BI0/XMATERIAL                 Attribute SID Table: InfoObject Material
    /BI0/ZMATERIAL                 View Hierarchy SIDs and Nodes: Char. Mater
    For Cubes
    you just goto SE11 and give star 0ic_c03 star and F4 then you can see the all tables for that cube like that you can check.
    Thanks
    Reddy
    Edited by: Surendra Reddy on Jan 21, 2010 5:40 AM

  • Data loading into Data warehouse Tables

    Hi all,
    I am having scenario like this. I am having table with lacks of records. Every day, new data will come with some records DELETE ed, some new records
    INSERT ed, some records UPDATE ed. I have to load this new data into parent table.
    Currently, we are DELETING all parent data and inserting new data. It is taking a lot of time. There is NO PRIMARY KEY on this parent
    table.
    What are the best options to load the new data. Actually, there are several tables are there. I have mentioned one table for example.
    Oracle version is 9i.
    Thanks,
    Pal

    I need to know which is a better way of loading flat
    files data into Warehouse tables. SQL*Loader or
    Oracle DataMart Suite. Doesn't make much odds. The advantage of using the
    Delimited or Fixed Length transform is that it keeps
    everything within Data Mart Suite.
    1. What all types of databases are supported by DataMart
    ODBC. DataMart Suite will support most RDBMS's as an
    ODBC source. Sybase, SQL Server, Informix, DB2, Redbrick,
    Teradata. Note this is only a source for the
    data, not a store for the DataMart
    2. Can DataMart suite be programmed for auto operation of
    loading data.There is some limited scheduling functionality based on
    the NT scheduler service. Where you want to run one plan
    following another, you may need to get a bit clever, by
    including some preprocessing to check that the previous
    plan has completed or use a third party scheduler which
    would not start the plan until the previous plan had
    completed.
    3. What is the extend of errors handling in loading operation,
    supported by this suite. Pretty good. All the stuff from SQL Loader, plus each of the
    transforms has it's own error handling.
    ===
    Manish Jain (guest) wrote:
    : Hello,
    : I need to know which is a better way of loading flat
    : files data into
    : Warehouse tables. SQL*Loader or Oracle DataMart Suite.
    : 1. What all types of databases are supported by DataMart ODBC.
    : 2. Can DataMart suite be programmed for auto operation of
    : loading data.
    : 3. What is the extend of errors handling in loading operation,
    : supported by this suite.
    : regards,
    : Manish.
    Oracle Technology Network
    http://technet.oracle.com
    null

  • Oracle Data Pump - Table Structure change

    Hi,
    we have daily partitioned table, and for backup we are using data pump (expdp). we policy to drop partition after backup (archiving).
    we have archived dump files for 1year, few days back developer made changes with table structure they added one new column to table.
    Now we are unable to restore old partitions is there a way to restore partition if new column added / dropped from currect table.
    Thanks
    Sachin

    If a new column has been added to the table, you can import only the the data from the old structure to the new structure. Use the parameter CONTENT=DATA_ONLY.

  • Using Sequence with Data Warehouse Table

    I am working on a Uni exercise on data warehousing and am trying to create and populate a table with a sequence on one database with data located on another database.
    For this particular table, I have to reset the primary key (primary keys on operational table start from 4000). In my notes, I have been told to create a sequence first and use yoursequence.nextval in the sub query. I am not very experienced with using sequences and am not sure what a subquery is in relation to them.
    I tried the following but it didn't work. Hopefully it will give you an idea as to what I am trying to achieve:
    create table Region as select region_id_seq, Region_Name, Management_area, Country from dw_op.Sales_Region@q_link;
    Any help with this would be great.

    Thanks again, Justin.
    My instructions tell me to use the schema name along with the db link and it created the table correctly so I'll just have to keep my eye on it.
    Do oyu know how I could use the function initcap to ensure all data is of the same format? I did a bit of research and found that I should be using column aliases which I duly tried but I received an error saying the following line needs a column alias:
    initcap(s.region_name),
    Just thought you may know how this can be done.
    Thanks.

  • Alignment normal data like table structure

    Hi,
    Actually requirement is need to align table format. I used iterator for pagination,in that not able to adding the columns .please find the below sample code and required structure like table format. please help me regarding on this. Thanks in advance.
    <af:iterator id="i1" var="row" value="#{bindings.CatPartiesS1.collectionModel}"
    binding="#{backingBeanScope.ListBean.emplsTableIterator}"
    rows="3">
    <af:spacer width="5" height="10" id="s3416"/>
    <af:panelGroupLayout id="pgl439" layout="horizontal">
    <af:spacer width="5" height="10" id="s39"/>
    <af:panelGroupLayout id="pgl120" inlineStyle="width:120px;" layout="horizontal">
    <af:selectBooleanCheckbox text="" id="sbc2431"
    inlineStyle="font-weight:bold;"/>
    <af:panelGroupLayout id="pgl52" layout="horizontal" inlineStyle="width:120px;">
    <af:outputText value="#{row.PurchasingCategory}" id="ot8"/>
    </af:panelGroupLayout>
    </af:panelGroupLayout>
    <af:panelGroupLayout id="pglert120" inlineStyle="width:120px;" layout="horizontal">
    <af:spacer width="5" height="10" id="s32912"/>
    <af:panelGroupLayout id="pgl66wq49" layout="horizontal" inlineStyle="width:120px;">
    <af:outputText value="#{row.MatlQty}" id="ot10"/>
    </af:panelGroupLayout>
    </af:panelGroupLayout>
    <af:spacer width="5" height="10" id="s51"/>
    <af:panelGroupLayout id="pgl634" layout="horizontal" inlineStyle="width:120px;">
    <af:outputText value="#{row.MatlCost5}" id="ot331"/>
    </af:panelGroupLayout>
    <af:spacer width="5" height="10" id="s544t1"/>
    <af:panelGroupLayout id="pgl1d3s20"
    inlineStyle="width:120px;"
    layout="horizontal">
    <af:outputText value="Current Selection:"
    partialTriggers="::i1" id="ot2"/>
    <af:outputText value="#{bindings.DataCode3.inputValue}"
    id="ot17" partialTriggers="::i1"/>
    </af:panelGroupLayout>
    <af:spacer width="5" height="10" id="s5123"/>
    <af:panelGroupLayout id="pgl12de0" inlineStyle="width:120px;" layout="horizontal">
    <af:outputText value="#{row.CatMatlCost}" id="ot41"/>
    </af:panelGroupLayout>
    <af:spacer width="5" height="10" id="s51213"/>
    <af:panelGroupLayout id="pgl2326" layout="horizontal" inlineStyle="width:120px;">
    <af:outputText value="#{row.CatMatlPur}" id="ot7"/>
    </af:panelGroupLayout>
    <af:spacer width="5" height="10" id="s5343"/>
    <af:panelGroupLayout id="pgldw2120" inlineStyle="width:120px;" layout="horizontal">
    <af:outputText value="Current Selection:" partialTriggers="::i1" id="ot9"/>
    <af:outputText value="#{bindings.DataCode2.inputValue}" id="ot171" partialTriggers="::i1"/>
    </af:panelGroupLayout>
    <af:spacer width="10" height="10" id="s53343"/>
    <af:panelGroupLayout id="pgee3l120" inlineStyle="width:120px;" layout="horizontal">
    <af:outputText value="#{row.CatMatlPur}" id="ot57"/>
    </af:panelGroupLayout>
    </af:panelGroupLayout>
    </af:iterator>
    Thanks
    VJ

    Hi Frank,
    Here i need some clarification.
    Actaully i have read some blogs saying that trinidad components are not suggestable to mix with ADF components as their life cycle is different..
    can we use same in ADF page?
    after adding trinidad, i got some issues like button action is not working on first click like that (anyway we solved those)..So how to resolve these type issues and Is that error is because of trinidad or not?
    can you pls clarify me?
    and below is my code for ur refererce if required.(This code is having one selectOneChoice with +,- buttons.If user clicks on '+' another selectoneChise and +,- buttons should be added to the PanelGroupLayout .and Used iterator for doing this. )
    <af:iterator id="i1" var="dynamicRow"
    value="#{viewScope.valuesBean.ccAL}"
    varStatus="dynamicIndex">
    <af:panelGroupLayout layout="horizontal"
    id="colpg_${dynamicIndex.index}"
    clientComponent="true">
    <af:selectOneChoice value="#{dynamicRow.cntValue}"
    immediate="true"
    id="soc11_${dynamicIndex.index}"
    autoSubmit="true"
    contentStyle="width:265px;"
    valuePassThru="true"
    clientComponent="true"
    valueChangeListener="#{backingBeanScope.testSearchBean.valueChangeListenerGeneric}"
    disabled="#{viewScope.readOnly.editable['fieldEditable'] eq 'N'}">
    <af:forEach var="lov1"
    items="#{bindings.purposeLOVIterator.allRowsInRange}">
    <f:selectItem id="sei1"
    itemLabel="#{lov1.codeShortName}"
    itemValue="#{lov1.codeShortName}"/>
    </af:forEach>
    </af:selectOneChoice>
    <af:inputText contentStyle="width:20px;"
    id="itcol_${dynamicIndex.index}"
    value="#{dynamicRow.qtyValue}"
    clientComponent="true" autoSubmit="true"
    valueChangeListener="#{backingBeanScope.testSearchBean.valueChangeListenerGeneric}"
    immediate="true"
    disabled="#{viewScope.readOnly.editable['fieldEditable'] eq 'N'}"/>
    <af:spacer width="5" height="10" id="s6" visible="#{viewScope.valuesBean.ccCount eq
    dynamicIndex.index+1}" ></af:spacer>
    <af:commandButton text="+"
    id="cb1_${dynamicIndex.index}" visible="#{viewScope.valuesBean.ccCount eq
    dynamicIndex.index+1}" binding="#{backingBeanScope.editBean.addCCBinding}"
    clientComponent="true"
    styleClass="dynComBtn"
    disabled="#{viewScope.readOnly.editable['fieldEditable'] eq 'N'}">
    <af:clientAttribute name="tubeName"
    value="CollectionTube"/>
    <f:attribute name="TestProcessId"
    value="#{dynamicRow.cntId}"/>
    <af:clientListener method="onAddAction" type="click"/>
    <af:serverListener type="MyCustomServerEvent"
    method="#{backingBeanScope.editBean.addAL}"/>
    </af:commandButton>
    <af:spacer width="5" height="10" id="s4" visible="#{dynamicIndex.index >0}"/>
    <af:commandButton text="-"
    id="cb2_${dynamicIndex.index}"
    visible="#{dynamicIndex.index >0}"
    clientComponent="true"
    styleClass="dynComBtn"
    disabled="#{viewScope.readOnly.editable['fieldEditable'] eq 'N'}">
    <f:attribute name="removeId" value="#{dynamicRow}"/>
    <af:clientAttribute name="tubeName"
    value="CollectionTube"/>
    <f:attribute name="delIndex"
    value="#{dynamicIndex.index}"/>
    <af:clientAttribute name="dIndex"
    value="#{dynamicIndex.index}"/>
    <af:clientListener method="onDelAction" type="click"/>
    <af:serverListener type="MyCustomDelEvent"
    method="#{backingBeanScope.editBean.delAL}"/>
    </af:commandButton>
    </af:panelGroupLayout>
    <af:spacer width="10" height="5" id="s16"/>
    </af:iterator>
    Thanks

  • Determine indexes by rule of thumb - no data or table structures

    Hi,
    Im doing some research (would really like to see peoples answers)
    could some one give me an idea of the best way to index a tables the tables that appear in the statement below, to optimise performance.
    select p.fname, p.sname ,p.personid,av.availid, av.adate, nwa.hospitalid,
    nvl(to_char(av.astart,'HH24:MI'),'Not Specified') as ActualStart, nvl(to_char(av.aend,'HH24:MI'),'Not Specified') as ActualEnd, av.anyearly, av.anymiddle, av.anylate, av.anynight
    from tblperson p
    left outer join tblavailability av on p.personid = av.personid
    left outer join tblnurseworkarea nwa on p.personid = nwa.personid
    order by 1, 2;av.anyearly, av.anymiddle, av.anylate, av.anynight are all boolean fields 1/0
    Please, I need someone to tell me how they would index the tables used here, from instinct..... and rule of thumb....
    Much appriciated

    what about if the query were like so:
    select p.fname, p.sname ,p.personid,av.availid, av.adate, nwa.hospitalid,
    nvl(to_char(av.astart,'HH24:MI'),'Not Specified') as ActualStart, nvl(to_char(av.aend,'HH24:MI'),'Not Specified') as ActualEnd, av.anyearly, av.anymiddle, av.anylate, av.anynight
    from tblperson p
    left outer join tblavailability av on p.personid = av.personid
    left outer join tblnurseworkarea nwa on p.personid = nwa.personid
    WHERE av.availid = 3
    order by 1, 2;any difference in what you would do?

  • ERP data warehouse

    Hi all,
    What is the requirement of data warehouse if ERP exists? As ERP captures major transactional data then what are the difficulties to analyze data directly from ERP database? What bebefits can be found if data is transformed into data warehouse data model? What are the difficulties to transforme data from ERP to data warehouse?
    Please help me. These are the research questions of my M.Sc thesis.
    Thanks.
    Swapan

    I'm receiving a similar error when attempting to create data warehouse tables with BIAPPS 7.9.6.
    The "Installing the DAC Platform" documentation states:
    "4.9.4.2 How to Create ODBC Connections for Oracle Databases
    Follow these instructions for creating ODBC connections for Oracle databases on
    Windows. For instructions on creating ODBC connections for Oracle databases on
    UNIX or Linux, see the documentation provided with your database.
    Note: You must use the Oracle Merant ODBC driver to create the ODBC connections.
    The Oracle Merant ODBC driver is installed by the Oracle BI Applications installer.
    Therefore, you will need to create the ODBC connections after you have run the Oracle
    BI Applications installer and have installed the DAC Client."

  • Best practice of metadata table in data warehouse environment ?

    Hi guru's,
    In datawarehouse, we have 1. Stage schema 2. DWH(Data warehouse reporting schema). In stageing we have about 300 source tables. In DWH schema, we are creating the tables which are only required from reporting prespective . some of the tables in stageing schema, have been created in DWH schema as well with different table name and column names. The naming convention for these same tables and columns in DWH schema is more based on business names.
    In order to keep track of these tables we are creating metadata table in DWH schema say for example
    Stage                DWH_schema
    Table_1             Table_A         
    Table_2             Table_b
    Table_3             Table_c
    Table_4              Table_DMy question is how do we handle the column names in each of these tables. The stage_1, stage_2 and stage_3 column names have been renamed in DWH_schema which are part of Table_A, Table_B, Table_c.
    As said earlier, we have about 300 tables in stage and may be around 200 tables in DWH schema. Lot of the column names have been renamed in DWH schema from stage tables. In some of the tables we have 200 column's
    so my concern is how do we handle the column names in metadata table ? Do we need to keep only table names in metadata table not column names ?
    Any idea will be greatly appriciated.
    Thanks!

    hi
    seems quite a buzzing question.
    In our project we designed a hub and spoke like architecture.
    Thus we have 3 layer, L0 is the one closest to the source and L0 table's name are linked to the corresponding sources names by mean of naming standard (like tabA EXT_tabA tabA_OK1 so on based on implementation of load procedures).
    At L1 we have the ODS , normalized model , we use business names for table there and standard names for temporary structures and artifacts
    Both L0 an L1 keep source's column names as general rule, new columns like calculated one are business driven and metadata are standard driven.
    Datamodeler fits perfect for modelling L1 purpose.
    L2 is the dimensional schema business names take place for tables and columns eventually rewritten at presentation layer ( front end tool )
    hope this helps D.

Maybe you are looking for

  • Delete all calendars from iPhone?

    My wife got a hand-me-down iPhone 3G from her brother. It has all of his calendars in it. Can we remove these calendars without having to sync it with something like Outlook? She connects this to an XP machine, not my Mac. She just wants to obliterat

  • Move Picasa photos to Time Capsule

    How do I move my photos that we use Picasa with to my Time Capsule so I can use th TC as a media server?

  • ME59N Multiple POs for Same Materials

    Currently ME59N is combining multiple purchase requisitions that have the same material onto a single PO. Is there a way to configure ME59N to always generate separate PO's for the same material if they are coming from differemt reuqisitions?    Than

  • Addin value of one into othar field n display it

    Hai Experts, ihave problem try help me plz, my problem is: i have some fields like A,B,C,D,E.in my ddic table and i designrd a screen with same fields so here i want have values on asex: think E = order value C = gallons and when each i enter a value

  • Is ios 8 update smaller in size via itunes than OTA

    is ios 8 update smaller in size via itunes than OTA