1NF is an aspect of a table representing a relationship, not a table as such.
If your attitude says ticket HAS price , that is a 1NF violation, because you cannot determine if there is a ticket HAS or HAS NOT price by looking at one record. You will need to get all the prices for this ticket and choose the last one, which violates the non-ordering rule 1NF .
If your relationship says ticket HAD BEGUN TO COST price ON date , then it is all right in 1NF , because each entry says that it says: this ticket costs this price from this date .
Thus, we say that this table does not correspond to 1NF when representing the first relationship, but corresponds to the second representation.
The table itself remains unchanged.
This does not necessarily mean that you need to split your tables.
The whole point of relational databases is that you can use relational operators to transform one relationship into another.
What is relation in terms of RDBMS ? This is a table containing all combinations of all possible values that are in this respect among themselves.
For example, if we need to build an equality relation on natural numbers from 1 to 5 , we have the following table:
1 1 2 2 3 3 4 4 5 5
All pairs that appear in this table are in equality; all pairs that do not appear are not. We do not see (2, 3) or (4, 5) , since they are not equal.
But you do not need to keep the whole pair in the database. Instead, you save individual values and write the query:
SELECT n1.number, n2.number FROM number n1, number n2 WHERE n1.number = n2.number
which gives you the same result.
Actually, normal forms allow you to store the simplest possible relationship tables in the database and build more complex relationships from them using SQL queries.
In your case, if you write a query (or define a view) as follows:
SELECT ticket, price FROM mytable WHERE (ticket, date) IN ( SELECT ticket, MAX(date) FROM mytable GROUP BY ticket )
you get the relation ( ticket HAS price ) from ( ticket HAD BEGUN TO COST price ON date ) in the same way as if you saved the entire table in the database.