Since “Midday on Tuesday in August” (“Sunday on La Grande Jatte Island?”) Does not indicate a year, the only real solution is your table of all date and time components, all with a zero value.
In other words, you are merging your data.
You have two (admittedly) things: a human readable string, ad_date, and a number of possible dates.
If you can specify at least a range, you can do this:
create table artwork { artwork_id int not null primary key, name varchar(80), ... other columns date_description varchar(80), earliest_possible_creation_date datetime latest_possible_creation_date datetime } insert into artwork( name, date_description, earliest_possible_creation_date, latest_possible_creation_date ) values ( 'A Sunday Afternoon on the Island of La Grande Jatte', 'Mid-afternoon on a Tuesday in August' '1884-01-01', '1886-12-31' ), ( 'Blonde Woman with Bare Breasts', 'Summer 1878' '1878-05-01', '1878-08-31' ), ( 'Paulo on a Donkey', 'Early June 1923', '1923-06-01' '1923-06-15' );
This allows you to display everything you want and search for:
select * from artwork where @some_date between earliest_possible_creation_date and latest_possible_creation_date;
And, obviously, the “date of creation” (the date the artist created the work) is completely different from the “date depicted in the work,” if the latter can be determined at all.