It can sometimes be tempting to go down the EAV route (or even diabolically tempting), but hic sunt leones! This delightful image encapsulates the difficulties with such an approach - just like in primary school, you can't mix apples and oranges! Take a small amount of time to peruse the links to see where EAV can lead.
If I were you, I would do something like the following.
CREATE TABLE vehicle
(
vehicle_id INTEGER PRIMARY KEY,
vechicle_make VARCHAR (50), -- another table?
vehicle_name VARCHAR (50),
vehicle_estimated_value INTEGER,
vehicle_reserve INTEGER
);
CREATE TABLE gold
(
lot_id INTEGER PRIMARY KEY, -- database generated
dealer_id INTEGER, -- another table?
lot_name VARCHAR (30), -- unique/ or unique with dealer
gold_carat SMALLINT,
gold_value INTEGER,
gold_reserve INTEGER
);
CREATE TABLE portfolio
(
portfolio_id INTEGER, -- database generated
pf_asset_type INTEGER, -- FOREIGN KEY from asset_type table
pf_asset_id, -- the PK of the gold/vehicle tables
-- FOREIGN KEY from asset (gold) table
-- make the combo of pf_asset_type and pf_asset_id_id UNIQUE
pf_asset_value INTEGER,
pf_asset_reserve INTEGER
-- If I were you, I'd be using a TRIGGER to feed values
-- from the different asset tables
pf_asset_reserve INTEGER -- into these two monetary
-- fields. Not sure of the exact capabilities of SQL Server,
-- maybe some sort of non-updateable calculated field?
-- The advantage this has is that
you're not having a massive
-- you're not having a massive sum query for all your assets... Test and see what
-- works for you.
);
This schema should work on any server (tested on PostgreSQL), but obviously, you'll have to include Microsoft SQL Server specifics for auto-incrementing keys and syntax for the PK and FK constraints.
Other asset types can be readily added as required!