• Personally, I think 2 is actually your best option. The cons that you outlined I don't see as drawbacks, actually. You can easily add powerful join indexing simply by adding a mandatory index on each extended table on its foreign key:

    
    
    --Main Table Sample:
    CREATE TABLE MainTable
    (
    accountID INT NOT NULL
    , recordID INT NOT NULL
    , companyname VARCHAR(100) NOT NULL
    , CONSTRAINT PK_MainTable PRIMARY KEY (accountID, recordID)
    )
    --Example Extended Tables
    CREATE TABLE ExTable_Cust1
    (
    accountID INT NOT NULL
    , recordID INT NOT NULL
    , someIntField INT NULL
    , someTextField TEXT NULL
    , CONSTRAINT FK_MainTable_ExTable_Cust1 FOREIGN KEY (accountID, recordID) REFERENCES MainTable (accountID, recordID)
    )
    --Index on Foreign Key
    CREATE NONCLUSTERED INDEX IDX_ExTable_Cust1_MainTable ON ExTable_Cust1 (accountID, recordID)

    This will give you a great indexing scheme for table joins, and your ease of maintenance will probably depend on how modular you make your logic to create the extended tables (ie with a standard suffix, etc...)

    HTH,

    Jay